问题描述:制作一个菜单,使用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'); //用循环清除所有的回车,直到读取到键盘输入的c
switch(c)
{
case '1':
menu1();
break;
case '2':
menu2();
break;
default:
break;
}
}
return 0;
}