作为作业的一部分,我正在尝试从标准输入中读取一个字符,并根据它采取相应的行动:
由于某些原因,scanf会捕获字符和换行符,因此它会对输入执行某些操作,然后还会打印“请仅输入'y'、'n'或'm'!”的提示信息。如果我在标准输入中输入多个字符,则它将为所有字符打印该行,并正确处理第一个字符。例如:
如果我使用getchar,同样的事情会发生。我错过了什么?谢谢。
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,同样的事情会发生。我错过了什么?谢谢。