作为家庭作业的一部分,我试图从标准输入读取单个字符,并按照它行事:
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,也会发生同样的事情。我错过了什么?谢谢。