#include <stdio.h>
int main(){
char quit = 'n';
do{
printf("Quit? (Y/N)");
scanf("%c", &quit);
}while(quit=='n' || quit=='N');
}
何も入力せずにプログラムが終了するのはなぜですか?なぜscanfでこのループが終了するのですか?
#include <stdio.h>
int main(){
char quit = 'n';
do{
printf("Quit? (Y/N)");
scanf("%c", &quit);
}while(quit=='n' || quit=='N');
}
何も入力せずにプログラムが終了するのはなぜですか?なぜscanfでこのループが終了するのですか?
%c
フォーマット指定子は、改行を含む任意の文字を受け入れます。したがって、N
を押すと、scanf
がその文字を最初に読み込みますが、ENTERを押しても改行は入力バッファに残ります。次のループの繰り返しで改行文字が読み込まれます。また、改行がn
またはN
でないため、ループは終了します。
フォーマット文字列の先頭にスペースを追加する必要があります。これは改行を含む先行する空白を吸収します。
scanf(" %c", &quit);
だけにコードを変更:あなたは標準入力バッファをクリアする必要があり、このlink
を読む詳細については
。 %cの前にスペースを入れてください。 scanf( "%c"、&quit); – achal