问题描述:制作一个菜单,使用getchar()函数。
如果只用一个getchar(),输入的回车会影响到下一个getchar();
如果用连续两个getchar()函数,以便第二个可以把回车读取掉,会遇到问题:在多输入一个回车的情况下会出现识别不到输入的字符的情况。例如下面代码会一直打印主菜单无法跳转到下一个选项。
#include <stdio.h>
int main(void)
{
char c = 0;while(1){
printf("choise please\n");printf("1:menu1\n");printf("2:menu2\n");c = getchar();getchar();switch(c){
case '1':menu1();break;case '2':menu2();break;default:break; }}return 0;
}
解决方法:使用 while((c = getchar()) == ‘\r’); 用循环清除前面的回车,且由于子菜单也用这个方法,键盘输入后的回车不会对子菜单造成影响。
#include <stdio.h>
int main(void)
{
char c = 0;while(1){
printf("choise please\n");printf("1:menu1\n");printf("2:menu2\n");while((c = getchar()) == '\r'); //用循环清除所有的回车,直到读取到键盘输入的cswitch(c){
case '1':menu1();break;case '2':menu2();break;default:break; }}return 0;
}