为什么用do-while会跳出循环啊?

我先选择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') //上面添加打印

然后你就有思路了