как часть домашнего задания, я пытаюсь прочитать один символ из стандартного ввода и действовать в соответствии с ним:
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 »!» линия. Если я введу несколько символов в stdin, он напечатает эту строку для всех из них, а также будет работать правильно для первого символа. Так, например:
$ ./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. Что мне не хватает? спасибо.