我先选择A进入子菜单,然后选择D返回上一界面,结果会先提示输入有误再返回
我调试了一下,发现是最下面,也就是这段代码最外循环的else里的语句,
哪里出错了啊
case '3':
do{
system("cls");
_3menu( );
char er;
printf("\t\t\t选择:");
scanf(" %c",&er);
getchar();
if(er=='A')
{
do{
system("cls");
_3Amenu();
char rt;
scanf(" %c",&rt);
if(rt=='A')
{
man_set(); xunhuan_8=true; xunhuan_1=true; xunhuan_2=true; xunhuan_7=true;
}
else if(rt=='B')
{
man_modify(); xunhuan_8=true; xunhuan_1=true; xunhuan_2=true; xunhuan_7=true;
}
else if(rt=='C')
{
man_delete(); xunhuan_8=true; xunhuan_1=true; xunhuan_2=true; xunhuan_7=true;
}
else if(rt=='D')
{
xunhuan_8=false; fflush(stdin); xunhuan_1=true; xunhuan_2=true; xunhuan_7=true;
}
else
{
printf("输入有误!"); getch(); xunhuan_8=true; xunhuan_1=true; xunhuan_2=true; xunhuan_7=true;
}
}
while(xunhuan_8);
}
if(er=='B')
{
do{
system("cls");
_3Bmenu();
char ty;
scanf(" %c",&ty);
if(ty=='A')
{
system("cls"); room_set(); xunhuan_9=true; xunhuan_1=true; xunhuan_2=true; xunhuan_7=true;
}
else if(ty=='B')
{
system("cls"); room_modify(); xunhuan_9=true; xunhuan_1=true; xunhuan_2=true; xunhuan_7=true;
}
else if(ty=='C')
{
system("cls"); room_delete(); xunhuan_9=true; xunhuan_1=true; xunhuan_2=true; xunhuan_7=true;
}
else if(ty=='D')
{
xunhuan_9=false; xunhuan_1=true; xunhuan_2=true; xunhuan_7=true;
}
else
{
printf("输入有误!"); getch(); xunhuan_9=true; xunhuan_1=true; xunhuan_2=true; xunhuan_7=true;
}
}
while(xunhuan_9);
}
if(er=='C')
{
do{
system("cls");
_3Cmenu();
char yu;
scanf(" %c",&yu);
if(yu=='A')
{
system("cls"); hotel_set(); xunhuan_10=true; xunhuan_1=true; xunhuan_2=true; xunhuan_7=true;
}
else if(yu=='B')
{
system("cls"); hotel_modify(); xunhuan_10=true; xunhuan_1=true; xunhuan_2=true; xunhuan_7=true;
}
else if(yu=='C')
{
system("cls"); hotel_delete(); xunhuan_10=true; xunhuan_1=true; xunhuan_2=true; xunhuan_7=true;
}
else if(yu=='D')
{
xunhuan_10=false; xunhuan_1=true; xunhuan_2=true; xunhuan_7=true;
}
else
{
printf("输入有误!"); getch(); xunhuan_10=true; xunhuan_1=true; xunhuan_2=true; xunhuan_7=true;
}
}
while(xunhuan_10);
}
else if(er=='D')
{
system("cls"); xunhuan_7=false; xunhuan_1=true; xunhuan_2=true;
}
else
{
printf("输入有误!"); xunhuan_1=true; xunhuan_2=true; xunhuan_7=true;
}
}
while(xunhuan_7);
break;
调试下
while(xunhuan_数字);
这里的条件如果不满足,就会跳出循环
调试的方法是首先在while的地方下断点(breakpoint)按 f5运行程序。
如果不满足,再检查你的scanf的输入,这个注意,是区分大小写的。
另外你的程序本身写得不够合理,你给出题目本身,并且采纳本回答(有鉴于上次回答你的问题,你并没有采纳),可以给你写一个简单规范的程序。
是不是要在第二个do while里面的scanf(" %c",&rt);后加上 getchar();
你这个程序中,用的if下面的else if有问题, 其中的相互关系,下面是相互包括嵌套的,而你用了并列关系的表达方式,你试试把图中标出的else都去掉,试试,几个if都一样处理一下
我认真看了看,你就是后面没用if else结构,造成了问题,我把代码简化跑了一下,你看看:
#include <windows.h>
#include <iostream>
#include <vector>
#include <algorithm>
#include <conio.h>
using namespace std;
void _3Amenu()
{
}
int main()
{
bool xunhuan_8, xunhuan_1, xunhuan_2, xunhuan_7, xunhuan_9, xunhuan_10;
char er;
do{
system("cls");
printf("\t\t\t选择:");
scanf(" %c", &er);
getchar();
if (er == 'A')
{
do{
system("cls");
_3Amenu();
char rt;
scanf(" %c", &rt);
if (rt == 'A')
{
//man_set();
xunhuan_8 = true; xunhuan_1 = true; xunhuan_2 = true; xunhuan_7 = true;
}
else if (rt == 'B')
{
//man_modify();
xunhuan_8 = true; xunhuan_1 = true; xunhuan_2 = true; xunhuan_7 = true;
}
else if (rt == 'C')
{
//man_delete();
xunhuan_8 = true; xunhuan_1 = true; xunhuan_2 = true; xunhuan_7 = true;
}
else if (rt == 'D')
{
xunhuan_8 = false; fflush(stdin); xunhuan_1 = true; xunhuan_2 = true; xunhuan_7 = true;
}
else
{
printf("输入有误!"); getch(); xunhuan_8 = true; xunhuan_1 = true; xunhuan_2 = true; xunhuan_7 = true;
}
} while (xunhuan_8);
}
else if (er == 'B')
{
do{
system("cls");
//_3Bmenu();
char ty;
scanf(" %c", &ty);
if (ty == 'A')
{
system("cls"); xunhuan_9 = true; xunhuan_1 = true; xunhuan_2 = true; xunhuan_7 = true;
}
else if (ty == 'B')
{
system("cls"); xunhuan_9 = true; xunhuan_1 = true; xunhuan_2 = true; xunhuan_7 = true;
}
else if (ty == 'C')
{
system("cls"); xunhuan_9 = true; xunhuan_1 = true; xunhuan_2 = true; xunhuan_7 = true;
}
else if (ty == 'D')
{
xunhuan_9 = false; xunhuan_1 = true; xunhuan_2 = true; xunhuan_7 = true;
}
else
{
printf("输入有误!"); getch(); xunhuan_9 = true; xunhuan_1 = true; xunhuan_2 = true; xunhuan_7 = true;
}
} while (xunhuan_9);
}
else if (er == 'C')
{
do{
system("cls");
//_3Cmenu();
char yu;
scanf(" %c", &yu);
if (yu == 'A')
{
system("cls"); xunhuan_10 = true; xunhuan_1 = true; xunhuan_2 = true; xunhuan_7 = true;
}
else if (yu == 'B')
{
system("cls"); xunhuan_10 = true; xunhuan_1 = true; xunhuan_2 = true; xunhuan_7 = true;
}
else if (yu == 'C')
{
system("cls"); xunhuan_10 = true; xunhuan_1 = true; xunhuan_2 = true; xunhuan_7 = true;
}
else if (yu == 'D')
{
xunhuan_10 = false; xunhuan_1 = true; xunhuan_2 = true; xunhuan_7 = true;
}
else
{
printf("输入有误!"); getch(); xunhuan_10 = true; xunhuan_1 = true; xunhuan_2 = true; xunhuan_7 = true;
}
} while (xunhuan_10);
}
else if (er == 'D')
{
system("cls"); xunhuan_7 = false; xunhuan_1 = true; xunhuan_2 = true;
}
else
{
printf("输入有误!"); xunhuan_1 = true; xunhuan_2 = true; xunhuan_7 = true;
}
} while (xunhuan_7);
return 0;
}
你的程序有几个地方是不规范的,你先在
printf("Input er=%c\n",er);
if(er=='A') //上面添加打印
然后你就有思路了