首页 > 解决方案 > do ... while 循环不会破坏 c++

问题描述

目前我在执行此操作时遇到问题... while 循环。

do { 
 // program code here
    cout << "Would you like to run the program again?(yes/no)";
    bool exit = false;
    string strexit;
    do {
        getline(cin, strexit);
        if (strexit == "no") {
            exit = false;
            break;
        }
        else if (strexit == "yes") {
            exit = true;
        }
        else {
            cout << "Enter yes to rerun the program, and no to exit.\n";
        };
    } while (!exit);
    system("cls");
} while (exit);
return 0;
}

我在网上研究过,如何跳出 do ... while 循环,当条件为真时,它会再次循环,但如果它为假,则退出。因此,如果您查看代码,如果用户输入 no,它会设置 exit = false,这会将其从更大的 do while 循环中取出,其中 break 将其从当前的 do while 循环中取出。如果用户输入yes,它会将exit 更改为true,这会将其从当前的do ... while 循环中中断,但不会中断第二个循环。

我的问题是,(或我需要帮助的)是当用户输入“否”时,它无法退出 do ... while 循环,我对为什么感到非常困惑。(它循环回到程序的开头。)

标签: c++do-whilebreak

解决方案


在(缩短的)代码中

do
{
    bool exit = false;
    // ...
} while (!exit);

您实际上有两个不同的符号,名为exit. 在循环内你有变量。在循环之外,用于条件,你有函数std::exit. exit如果你有这将是显而易见的using namespace std;

条件中使用的函数 exit将衰减为指向函数的指针,并且永远不会为“假”。所以条件!exit总是true,你有一个无限循环。

要解决这个问题,您需要做两件事:

  1. 了解这using namespace std; 是非常糟糕的做法

  2. 将要定义的变量exit移到循环外。而且你真的应该把它重命名为更具描述性的东西(“退出”这个词有点笼统)。


推荐阅读