【问题标题】:Confusion with the OR logical Operator in a Loop与循环中的 OR 逻辑运算符混淆
【发布时间】:2014-12-15 05:04:18
【问题描述】:

早些时候,在一个 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 以退出时,循环就会继续运行。考虑到如果左边的表达式为真,while 循环不会计算右边的表达式,这使得它特别令人困惑。但无论如何,即使我输入 Y 或 y 循环也会继续运行!我想对为什么会发生这种情况进行一些深入的解释,我一直在试图找出原因,回顾我的教科书等,但我似乎无法理解为什么......我已经改变了 OR变成 AND,但是是什么让 OR 如此糟糕并导致它出现故障?

谢谢大家。

【问题讨论】:

标签: c++ operators computer-science


【解决方案1】:

条件(choice != 'y' || choice != 'Y') 始终为真,因此循环将无限期地运行。 如果选择 == 'y',那么你得到 (false || true) == true; 如果选择 == 'Y',那么你得到 (true || false) == true。 您需要改用while(choice != 'y' &amp;&amp; choice != 'Y'),在这种情况下,只有当您得到“y”或“Y”时才退出循环,否则您会得到 (true && true) 并继续。

【讨论】:

    【解决方案2】:

    如果至少有一个语句为真,则许多语句之间的OR 运算符返回真,无论其他语句是假还是真。在您的情况下,choice != 'y' || choice != 'Y' 的评估方式如下:

    第一条语句为真:执行while循环。

    第一个陈述为假:检查第二个陈述是否为真。

    第二条语句为真:执行while循环。

    第二条语句为假:不执行while循环。

    具体来说,当编译器到达choice != 'y'时,如果choice == 'Y'仍然会执行,因为choice != 'y'为真,实际上choice等于Y,所以它不同于y

    另一方面,如果choice等于y,那么它将检查第二个语句是否为真,但我们知道choice等于y,所以choice不同于@987654331 @,等等...

    【讨论】:

      【解决方案3】:

      你弄错了,你应该改“||”到“&&”

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多