2016-11-13 21 views
1
#include <stdio.h> 

int main(void) 
{ 
    char ch; 
    int end=0; 
    printf("\nPick a letter a through f. (f ends the program)"); 
    do 
    { 
     scanf("%c", &ch); 

     switch (ch) { 
    case 'a': 
     printf("a. another: "); 
     break; 
    case 'b': 
     printf("b. another: "); 
     break; 
    case 'c': 
     printf("c: another "); 
     break; 
    case 'd': 
     printf("d. another: "); 
     break; 
    case 'e': 
     printf("e. another: "); 
     break; 
    case 'f': 
     printf("f. Goodbye. "); 
     end=1; 
     break; 
    default: 
     printf("That wasn't a through f. "); 
     break; 
     } 
    } while (end == 0); 
    return 0; 
} 

だから、それは言うだろう:私のswitch文が大文字と小文字を出力するのはなぜですか?あなたが入力した場合

a. another: That wasn't a through f. 

をあなたはグラムを言って入力した場合、それは言うだろう:

That wasn't a through f. That wasn't a through f. 

あなたはfを入力した場合、予想通り、それは

を行います
f. Goodbye. 

プログラムが終了します。

これを修正する方法についてのヒントを教えてください。私はしばらくそれを探してみました。私はC言語ではなく、あなたが休憩を忘れていると答えています。ステートメント。私はC言語に新しいので、多分それは私が気づいていない明らかな何か、私はまた、それはdo whileループの何かのためかもしれないと思った?あなたの時間ありがとう

+0

問題は、 'scanf("%c "、&ch);'それにスペースを入れて修正する: 'scanf("%c "、&ch); ' – artm

+0

フォーマット指定子に空白文字を含まないscanfは、空白文字を他の文字と異なる方法で扱いません。 'a'のループを1回実行してから改行のために再度実行します – Tibrogargan

+0

scanfの説明をありがとうございます。私はそのように働いているのか分からなかった。 case '\ n':ブレーク;とscanf( "%c"、&ch);はどちらも同じように動作します – jonnyboy1555

答えて

3

scanf("%c", &ch)一度に1文字を読み込みます。文字を入力してEnterキーを押すと、文字と改行文字(U + 000A、'\n')の2つの文字が入力されます。

あなたは改行文字を無視したい場合は、1つのオプションを明示的にそれらをチェックすることです:

case '\n': 
    break; 
0

ます。また、この方法を使用して試すことができます。..

scanf("%c\n", &ch);

それは自動的に食べるようになります余分な\ n文字

関連する問題