帮忙解答下,我制作的菜单,急!!

来源:百度知道 编辑:UC知道 时间:2024/06/08 02:37:20
我要编一个程序,其中要用到菜单。先看我编的:

#include<stdio.h>
main()
{
int chos1;
do
{
printf("\nMAIN MENU\n1.normal stack\n2.base to base stack\n3.top to top stack\n4.exit");
printf("\nplease make your choose:");
scanf("%d",&chos1);
switch(chos1)
{
case 1:menu1();break;
case 2:menu2();break;
case 3:menu3();break;
case 4:break;
default:printf("\nWRONG INPUT!TRY AGAIN!(PRESS ANY KEY TO CONTINUE)");getch();
}
}while(chos1!=4);

在键入数字时没有问题,但是如打入jsk等字母,就会不断刷屏
求各位大虾帮忙,急~!!!先谢谢各位了
fflush(stdin);可以解决问题,但是此时打入字母时就不会出现WRONG INPUT!TRY AGAIN!(PRESS ANY KEY TO CONTINUE,怎么办?

你在
scanf("%d",&chos1);
后面加上这句就可以了
fflush(stdin);

不过我建议你建立一个getinput();
函数对输入先进行判断,
非数字输入的提示出错,然后要求重新输入
然后再将结果返回main()函数

fflush(stdin);把不符合的数据都抹掉了,你的输入根本进不了switch循环,那当然出不来了,我还是建议你设计一个读取输入的函数:
int getin(void)
{
int chos1;
while(1)
{
if(scanf("%d",&chos1)==1&&(chos1>=1&&chos1<=4))
return chos1;
else
{
printf("\nWRONG INPUT!TRY AGAIN!(PRESS ANY KEY TO CONTINUE)");
fflush(stdin);
continue;
}
}

}
然后在主函数中调用chos1=getin();

你用的什么编译器,如果是vc的话s在canf("%d",&chos1);的前面+一句fflush(stdin);//清空缓冲区

把你后面的getch();去掉

把default语句后面的getch()去掉,因该就可以了吧