[英]Confusion with the OR logical Operator in a Loop
早在IRC频道上,有人问了有关他的代码的问题-本质上说,他的程序在无限循环中运行:
#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退出时,循环就会继续运行。 考虑到如果左侧的表达式为true,则while循环不会评估右侧的表达式,因此这尤其令人困惑。 但是无论如何,即使我输入Y或y,循环也会继续运行! 我想对发生这种情况的原因进行更深入的解释,我一直试图将其解释出来,回头看课本等。但是我似乎不明白为什么...我改变了OR进入“与”门,但是什么使“或”门如此糟糕并导致其故障呢?
谢谢大家
条件(choice != 'y' || choice != 'Y')
始终为true,因此循环将不确定地运行。 如果选择=='y',则得到(false || true)== true; 如果选择=='Y',则得到(true || false)== true。 您需要使用while(choice != 'y' && choice != 'Y')
来代替,在这种情况下,仅当您获得'y'或'Y'时才退出循环,否则获得(true && true)并继续。
如果至少一条语句为true,则许多语句之间的OR
运算符将返回true,无论其他语句为false还是true。 在您的情况下, choice != 'y' || choice != 'Y'
choice != 'y' || choice != 'Y'
将像这样评估:
第一句话是正确的:执行while循环。
第一条陈述为假:检查第二条陈述是否为真。
第二句话是正确的:执行while循环。
第二句话是错误的:不要在while循环中执行。
具体来说,当编译器到达choice != 'y'
,如果choice == 'Y'
,则编译器仍将执行,因为choice != 'y'
为true,实际上选择等于Y
,因此与y
。
另一方面,如果choice等于y
,则它将检查第二条语句是否为true,但我们知道choice等于y
,所以choice
不同于Y
,依此类推...
您输入有误,请更改“ ||” 至 ”&&”
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.