早些时候在 IRC channel 上,有人问了一个关于他的代码的问题——本质上,他的程序在无限循环中运行:
#include <iostream>
using namespace std;
int main()
{
cout << "This program adds one to your input." << endl;
char choice = 'n';
int num = 0;
while (choice != 'y' || choice != 'Y')
{
cout << "Enter number: ";
cin >> num;
num++;
cout << "Your number plus 1 is: " << num << endl;
cout << endl << "Continue/Quit? Type 'Y' to quit, any other key to continue: ";
cin >> choice;
}
cout << "By choosing 'Y', you exit the loop." << endl;
return 0;
}
注意循环标题,似乎循环应该工作得很好,但每当我输入 Y 或 y 退出时,循环一直在运行。考虑到如果左边的表达式为真,while 循环将不会计算右边的表达式,这使得它特别困惑。但无论如何,即使我输入 Y 或 y 循环也会继续运行!我想要对为什么会发生这种情况进行深入的解释,我一直在尝试推理,回顾我的教科书等,但我似乎无法理解为什么......我已经改变了 OR变成 AND,但是是什么让 OR 如此糟糕并导致它发生故障?
谢谢大家。
最佳答案
条件 (choice != 'y' || choice != 'Y')
始终为真,因此循环将无限期运行。
如果 choice == 'y',那么你会得到 (false || true) == true;
如果选择 == 'Y',那么你会得到 (true || false) == true。
您需要使用 while(choice != 'y' && choice != 'Y')
代替,在这种情况下,只有当您得到 'y' 或 'Y' 时才退出循环,否则您会得到(true && true) 并继续。
关于c++ - 与循环中的 OR 逻辑运算符混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27477667/