我一直在尝试解决我的编码中的一个简单问题(我是C ++的新手)。
基本上,我正在尝试使用
退出while循环 continue
或
break
但是它不起作用。问题是
cout << "it worked!";
零件未执行。
#include <iostream>
#include <string>
using namespace std;
int main() {
int userChoice=0;
cout<<"1 for addiction and 2 for subtraction\n";
do{
if(cin >> userChoice){
switch (userChoice) {
case 1:
continue;
case 2:
continue;
default:
cout<<"Please select 1 for addiction or 2 for subtraction.\n";
break;
}
}
}while(userChoice!=1 || userChoice!=2);
cout<<"it worked!";
}
int addiction(int a,int b){
return a+b;
}
int subtraction(int a,int b){
return a-b;
}
答案 0 :(得分:1)
不可能离开循环,因为无论userChoice
总是 “不是1”还是“不是2”(永远不能都是!)。>
因此,由于continue
总是会进行另一次迭代,并且由于break
使您跳出switch
(不是循环),因此循环永远不会结束,并且cout
将永远不会执行。
在我看来,只要userChoice
不是1 也不是2:
while(userChoice!=1 && userChoice!=2);
这有时会使初学者感到困惑,他们采用英语快捷方式,例如“ userChoice既不是1也不是2”,而他们的意思是“ userChoice既不是1也不是2”,并且没有意识到C ++没有“ nether / nor” ”结构,因此最终在没有仔细考虑的情况下错误地写出“ userChoice不是1或userChoice不是2”。
由于肯定比否定更直观,所以一种向自己澄清的方法是应用戴摩根定律。您的固定代码等效于:
while(!(userChoice == 1 || userChoice == 2));
即“在userChoice是1或2的情况下不是循环。”可以说这是更糟糕的代码,但是以这种方式简要地写出来可以帮助您理解。