C++ 尽管条件错误,但循环不会结束
我试图在循环中使用switch,并带有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;
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;