c语言中菜单里switch语句里形成循环输入的问题(求高人解答)
intmenu(){system("cls");//清屏。。intn;printf("*************************************\n");...
int menu()
{
system("cls");//清屏。。
int n;
printf("*************************************\n");//菜单项
printf(" 1.录入信息");
printf(" 2.浏览信息 *\n");
printf(" 3.查询信息");
printf(" 4.成绩排序 *\n");
printf(" 5.信息修改");
printf(" 6.退出系统 *\n");
printf("*************************************\n");
printf("请选择:");
scanf("%d",&n);
switch(n)
{
case 1:luru();break;
case 2:liulan();break;
case 3:chaxun();break;
case 4:paixu();break;
case 5:xiugai();break;
case 6:exit(0);
default:error();
}
int error()
{
printf("无效选择,按任意键返回主菜单");
system("pause>nul");
system("cls");
return menu();
}
当我进去后输入不是一个字符时,例如asd,理论上调用default里的语句,return menu();应该可以继续输入的,但是屏幕老是闪几下,大致看了下,前面输入几个字母就闪几下,说明多循环了那么几遍,我想知道问什么会这样,switch语句默认只接受一个字符??多的会出现这样情况?有什么办法可以避免这种情况??(PS:不想在这用if else代替switch case 解决这个问题) 展开
{
system("cls");//清屏。。
int n;
printf("*************************************\n");//菜单项
printf(" 1.录入信息");
printf(" 2.浏览信息 *\n");
printf(" 3.查询信息");
printf(" 4.成绩排序 *\n");
printf(" 5.信息修改");
printf(" 6.退出系统 *\n");
printf("*************************************\n");
printf("请选择:");
scanf("%d",&n);
switch(n)
{
case 1:luru();break;
case 2:liulan();break;
case 3:chaxun();break;
case 4:paixu();break;
case 5:xiugai();break;
case 6:exit(0);
default:error();
}
int error()
{
printf("无效选择,按任意键返回主菜单");
system("pause>nul");
system("cls");
return menu();
}
当我进去后输入不是一个字符时,例如asd,理论上调用default里的语句,return menu();应该可以继续输入的,但是屏幕老是闪几下,大致看了下,前面输入几个字母就闪几下,说明多循环了那么几遍,我想知道问什么会这样,switch语句默认只接受一个字符??多的会出现这样情况?有什么办法可以避免这种情况??(PS:不想在这用if else代替switch case 解决这个问题) 展开
5个回答
展开全部
我感觉错误是在你在error()中调用了menu()方法,这样会构成一个递归。建议的程序结构如下:
http://blog.csdn.net/nuaazdh/article/details/7058558;
这是典型的提示菜单响应程序。
建议这样改:
scanf("%d",&n);
while(d!=0){
switch(n)
{
case 1:luru();break;
case 2:liulan();break;
case 3:chaxun();break;
case 4:paixu();break;
case 5:xiugai();break;
default:
printf("无效选择,按任意键返回主菜单");
system("pause>nul");
system("cls");
}//switch
scanf("%d",&n);
}//end of while
http://blog.csdn.net/nuaazdh/article/details/7058558;
这是典型的提示菜单响应程序。
建议这样改:
scanf("%d",&n);
while(d!=0){
switch(n)
{
case 1:luru();break;
case 2:liulan();break;
case 3:chaxun();break;
case 4:paixu();break;
case 5:xiugai();break;
default:
printf("无效选择,按任意键返回主菜单");
system("pause>nul");
system("cls");
}//switch
scanf("%d",&n);
}//end of while
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
嘿嘿, 你不妨在你的程序中调试一下看看, 其实当从error调用menu的时候n好像被前面的东西赋值了吧
你可以采用一种方式就是在error函数中添加如下代码就解决问题
char tmp;
while ((tmp=getchar()) != '\n')
{
continue;
}
你可以采用一种方式就是在error函数中添加如下代码就解决问题
char tmp;
while ((tmp=getchar()) != '\n')
{
continue;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
很明显是因为你这个error函数中又调用了一次menu()。
把error函数改成
void error(void)
{
printf("无效选择,按任意键返回主菜单");
system("pause>nul");
system("cls");
}
把error函数改成
void error(void)
{
printf("无效选择,按任意键返回主菜单");
system("pause>nul");
system("cls");
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把scanf换成getch(),其作用是从键盘读入一个字符(不用按回车),注意要包含头文件<conio.h>
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
scanf("%d",&n); 后加一个getchar();就可以解决了
追问
试过,输入2个字符时有用,这样接收了一个字符,但是输入3个字符时,还是会再多循环一次,更不用说输入多个字符了,我是想实现不管乱输入什么都能直接跳到主菜单继续开始
追答
scanf("%d",&n); 这句改成如下语句:
do
{
int ret= scanf( "%d" , &n );
if ( ret == 1 )
break ;
getchar();
} while ( 1 );
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询