c++ - 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 循环,我对为什么感到非常困惑。(它循环回到程序的开头。)
解决方案
在(缩短的)代码中
do
{
bool exit = false;
// ...
} while (!exit);
您实际上有两个不同的符号,名为exit
. 在循环内你有变量。在循环之外,用于条件,你有函数std::exit
. exit
如果你有这将是显而易见的using namespace std;
。
条件中使用的函数 exit
将衰减为指向函数的指针,并且永远不会为“假”。所以条件!exit
总是true
,你有一个无限循环。
要解决这个问题,您需要做两件事:
了解这
using namespace std;
是非常糟糕的做法将要定义的变量
exit
移到循环外。而且你真的应该把它重命名为更具描述性的东西(“退出”这个词有点笼统)。
推荐阅读
- javascript - 全局字体系列不适用于按钮
- c# - 使用 NSubstitute 模拟 Masstransit 的 GetRetryAttempt()
- amazon-ec2 - 如何使用 gitlab yml 文件发布我的 .net 核心代码并在 AWS Windows 实例中部署
- python - 如何使用 Python 将边界框坐标转换为 Yolo 坐标?
- c# - 使用asp.net mvc将html foreach循环数据转换为webgrid
- python - 使用 Python 绘制交互式地图的问题
- r - 如何解决 R Shiny 中的这个错误?
- javascript - 忽略掉毛和格式化中的线条 - VSC EsLint + Prettier
- ios - iOS Swift 通过 UITableView 获取 CGPoint 并带有以下单元格内容
- flutter - 从实时数据库中获取更多数据