做... while循环不破坏c ++

Ada*_*mer -3 c++ break do-while

目前我遇到了这个问题... 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;
}
Run Code Online (Sandbox Code Playgroud)

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

我的问题是,(或者我需要帮助的是)当用户输入'no'时,它不能退出do ... while循环,而我对于为什么会非常困惑.(它循环回到程序的开头.)

Som*_*ude 13

在(缩短的)代码中

do
{
    bool exit = false;
    // ...
} while (!exit);
Run Code Online (Sandbox Code Playgroud)

你实际上有两个不同的符号命名exit.在循环内你有变量.在循环之外,并用于条件,你有功能std::exit.exit如果你有,这将是明确的using namespace std;.

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

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

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

  2. 移动exit要在循环外定义的变量.你应该真正重命名为更具描述性的东西("退出"这个词有点笼统).

  • 对于它的价值,g ++上的`-Wall`会在警告中暴露出错误. (4认同)
  • 第三个建议.不要使用`exit`作为变量.也许使用`exitLoop`. (2认同)