2017-05-26 15 views
-3
#include "stdafx.h" 
#include "stdlib.h" 
#include <ctype.h> 

int num = 0; 
int i = 0; 
int ch = 0; 

int letter_index_in_alphabet(int ch) { 

     if (isalpha(ch) == true) { 
      char temp_str[2] = { ch }; 
      num = strtol(temp_str, NULL, 36) - 9; 
      printf("%d is a letter, with %d as its location in the alphabet!", ch, num); 
     } 
     else { 
      return -1; 
     } 

} 

int main() 
{ 
    char input_str[10]; 
    printf("Please enter a series of up to 10 letters and numbers: \n"); 

    fgets(input_str, 10, stdin); 

    for (i == 0; i <= 10; i++) { 
     ch = input_str[i]; 
     letter_index_in_alphabet(ch); 

    } 

    return 0; 
} 

こんにちは皆さん、これはSOFの私の最初の投稿です!このプログラムの目的は、標準入力からEOFに文字を読み込むことです。各文字について、文字であれば報告する。文字の場合は、アルファベット( 'a'または 'A' = 1、 'b'または 'B' = 2..etc)でそれぞれのインデックスを印刷します。私はstackoverflow上のいくつかの他の投稿を検索しており、これは私がこれを(fgetsとstrtol関数を使って)得るのを助けてくれました。私はこのコードを実行すると、表示される構文エラーはありませんが、文字列(例:567gh3fr)を入力するとプログラムがクラッシュします。ユーザー入力を文字の配列に変換し、他の文字から文字をフィルタリングしますか?

基本的には、「fgets」を使用して、入力された各文字を適切なインデックスの文字列に変換しようとしています。その文字列を取得したら、各インデックスに文字がないかどうかチェックし、そうであればそのアルファベットの文字に割り当てられた番号を出力します。

これが意図したとおりに機能しない理由についての助力や洞察力があれば、大変感謝しています。

+1

1) 'i == 0; i <= 10;' --> 'i = 0; (i); isalpha(ch)== true' - > 'isalpha((unsigned char)ch)' – BLUEPIXY

+0

'i <= 10'は' i <10'でなければなりません。配列のインデックスは0から9になります。 – Barmar

答えて

1

あなたにはいくつか問題があります。

最初に、char input_str[10]は、ユーザーが文字列を終了するヌルバイトに1文字を許可する必要があるため、10文字ではなく9文字を入力できるだけの大きさです。

第2に、ループが遠すぎます。 10文字の文字列の場合、インデックスは10でなく9まで上がります。ユーザーが9文字すべてを入力していない可能性があるため、NULLバイトになると停止する必要があります。

アルファベットの位置を取得するには、文字の値からAまたはaの値を単に差し引くだけです。文字を使用する場合に変換するには、tolower()またはtoupper()を使用してください。あなたの方法は機能しますが、それはあまりにも複雑で混乱します。

letter_index_in_alphabet()intを返すと宣言されています。しかし、文字が文字の場合、return文は実行されません。戻り値を使用しないので何かを返すことになっている理由はわかりませんが、位置を返すように変更しました(おそらく、呼び出し元がメッセージを出力するものでなければなりません。 )。

forループでは、割り当てを実行するにはi = 0でなければなりません。i == 0ではなく、比較します。

また、グローバル変数もあまり使用しないでください。そして、システムヘッダファイルはでなければなりません。""ではありません。

#include <stdlib.h> 
#include <string.h> 
#include <stdio.h> 
#include <ctype.h> 

int letter_index_in_alphabet(int ch) { 

    if (isalpha(ch)) { 
     int num = tolower(ch) - 'a' + 1; 
     printf("%d is a letter, with %d as its location in the alphabet!\n", ch, num); 
     return num; 
    } else { 
     return -1; 
    } 
} 

int main() 
{ 
    char input_str[10]; 
    printf("Please enter a series of up to 9 letters and numbers: \n"); 

    fgets(input_str, sizeof(input_str), stdin); 

    for (int i = 0; input_str[i]; i++) { 
     letter_index_in_alphabet(input_str[i]); 
    } 

    return 0; 
} 
+0

すばらしい応答をいただきありがとうございます。 – Douggle07

関連する問題