宿題の一環として、標準入力から単一の文字を読み取り、それに従って行動しようとしています:
char choice;
while (1) {
printf("please enter [y]es, [n]o or [m]aybe: ");
scanf("%c", choice);
fflush(stdin);
// validate input
if (choice == 'y' || choice == 'n' || choice == 'm') {
break;
} else {
printf("Please enter only \'y\', \'n\' or \'m\'!\n");
}
}
// do something with the input
if (choice == 'y') {
printf("you selected yes!\n");
}
何らかの理由で、scanf は後に文字と改行の両方をキャプチャするため、入力に対して何かを実行し、「'y'、'n'、または 'm' のみを入力してください!」も出力します。ライン。標準入力に複数の文字を入力すると、最初の文字も正しく実行しながら、そのすべての行が出力されます。たとえば、次のようになります。
$ ./run
please enter [y]es, [n]o or [m]aybe: y<return>
you selected yes!
Please enter only 'y', 'n' or 'm'!
$ ./run
please enter [y]es, [n]o or [m]aybe: yes<return>
you selected yes!
Please enter only 'y', 'n' or 'm'!
Please enter only 'y', 'n' or 'm'!
Please enter only 'y', 'n' or 'm'!
$
getchar を使用しても同じことが起こります。私は何が欠けていますか?ありがとう。