繁体   English   中英

循环中与OR逻辑运算符的混淆

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM