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

标签 c++ operators computer-science

早些时候在 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/

相关文章:

c++ - 可能的内存泄漏?

c++ - 字符串数组,我该如何使用它?执行

c++ - 为什么 implicit == on map<<int,MyClass> 不编译?

c++ - 有没有办法让函数在 C++ 中接受一个运算符作为参数?

java - 如何从 drawSquare 方法中删除递归并获得完全相同的结果?

java - 图的深度优先搜索

c++ - 用于从可能不存在的容器中检索对象的 API 设计

C++,Integer和Char数组转换麻烦

c# - 实现特定运算符的对象的 .NET 接口(interface)/约束

algorithm - 消防部门覆盖区域