C语言的一个循环问题
void main()
{
while(1)
{
printf("请选择一个操作:\n");
printf("创建成绩单(c)\t添加学生(a)\t排序(t)\n显示成绩(p)\n\n\n");
switch(getchar())
{
case 'c':Creat();break;
case 'a':Add();break;
case 'p':Disp();break;
default:printf("输入有误,请重新选择:\n");
}
}
}
我的本意是比如输入p,调用完Disp()之后,重新列出选择菜单,但实际上,第二次循环没有要求你输入,而是列出菜单之后直接跳到default,然后第三次循环才正常接收输入,请问这是咋回事?(运行结果如下)
请选择一个操作:
创建成绩单(c) 添加学生(a) 显示成绩(p)
p
学号 姓名 数学 语文 英语 平均
请选择一个操作:
创建成绩单(c) 添加学生(a) 显示成绩(p)
输入有误,请重新选择:
请选择一个操作:
创建成绩单(c) 添加学生(a) 显示成绩(p)
[解决办法]
你每次输入数据的时候都会敲一个回车键,是不是?而getchar是不分别字符是什么类型的。当你输入第一个字符后,第二个字符就是敲的这个回车键了。
[解决办法]
while(1)
{
printf("请选择一个操作:\n");
printf("创建成绩单(c)\t添加学生(a)\t排序(t)\n显示成绩(p)\n\n\n");
switch(getchar())
{
case 'c':Creat();break;
case 'a':Add();break;
case 'p':Disp();break;
default:printf("输入有误,请重新选择:\n");
}
fflush(stdin);
}