Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 尽管条件错误,但循环不会结束_C++_While Loop_Switch Statement_Conditional - Fatal编程技术网

C++ 尽管条件错误,但循环不会结束

C++ 尽管条件错误,但循环不会结束,c++,while-loop,switch-statement,conditional,C++,While Loop,Switch Statement,Conditional,我试图在循环中使用switch,并带有exit(3)选项 如果我立即按3,则一切正常,while循环结束 如果我先输入任何其他选项,然后在第二次按“3”,循环将继续一次,我需要再按一次“3”退出 我试着做了一些调试,结果显示“exit”等于true,但循环还是执行了 enum mainIndex { products = 1, clients, mainExit }; void Menue::start() { bool exit = false; int option;

我试图在循环中使用switch,并带有
exit(3)
选项

如果我立即按3,则一切正常,while循环结束

如果我先输入任何其他选项,然后在第二次按“3”,循环将继续一次,我需要再按一次“3”退出

我试着做了一些调试,结果显示“exit”等于true,但循环还是执行了

enum mainIndex { products = 1, clients, mainExit };

void Menue::start() {
    bool exit = false;
    int option;
    while (!exit) {
        cin >> option;
        // swich menue
        switch (option)
        {
        case products:
            prodMenue();
            break;
        case clients:
            clientMenue();
            break;
        case mainExit:
            exit = true;
            break;
        default:
            cout << "Error" << endl;
            break;
        }; // end switch
    }
}
调用
start()clientMenue()
prodMenue()
函数中选择code>是导致问题的原因。由于这些函数已从
start()
函数调用,因此无需从这些函数内部调用
start()
函数,因为它们完成后将返回
start()

例如,您正在做的是:

    (1st)Start()---calls--->clientMenue()---calls---->(2nd)Start()
So  (2nd)start() --return to-->clientMenu()---return to--->(1st)start()
假设只显示一次clientMenue()并决定退出Start(),这就是为什么需要为Start提供两次退出条件,每个Start()函数一个退出条件。如果通过调用clientMenue()或prodMenue()函数N次而不选择退出start()来显示客户端或产品菜单,则在决定退出start()时,必须输入退出条件N+1次

因此,从
clientMenue()
prodMenue()
函数中删除对
start()
函数的调用。

根据我的经验

如果我在while循环中使用switch,cpu被锁定,并且对任何用户或系统输入都没有响应

这里有一个例子是锁定我的cpu,而不是打印到屏幕“打破while循环”,为什么会发生这种情况我不知道,但当我输入等待函数到案例1时 循环被真实地分解

int condition = 1;
bool loop = true;
while(loop ){

    switch(condition){

       case 1:
         wait(1); // if you put this with any msecond, loop can be break
         cout << "Enter 2 for exit" << endl;
         cin >> condition;

       break;

       case 2:

         cout << "Exiting";
         loop = false;

       break;

       default:

       break;

    }
}

cout << "breaking the while loop" << endl;
int条件=1;
布尔循环=真;
while(循环){
开关(条件){
案例1:
wait(1);//如果将其与任何毫秒放在一起,则循环可以中断
库特条件;
打破
案例2:

可能。问题最有可能出现在您没有向我们展示的代码中。问题将出现在
prodMenue
和/或
clientMenue
中。我添加了prodMenue和clientMenue-它们的工作原理相同。我仍然无法复制问题。您能向我们展示您的main()和start()吗函数。并且给定代码中的退出条件是5而不是3。问题只出现在“开始”菜单中,其中退出条件是3。I ll和类菜单以及主菜单
    (1st)Start()---calls--->clientMenue()---calls---->(2nd)Start()
So  (2nd)start() --return to-->clientMenu()---return to--->(1st)start()
int condition = 1;
bool loop = true;
while(loop ){

    switch(condition){

       case 1:
         wait(1); // if you put this with any msecond, loop can be break
         cout << "Enter 2 for exit" << endl;
         cin >> condition;

       break;

       case 2:

         cout << "Exiting";
         loop = false;

       break;

       default:

       break;

    }
}

cout << "breaking the while loop" << endl;