While 循环什么时候使用OR 或AND?

While Loop when to use OR or AND?

我需要帮助解决这个简单的问题。

我开始了解有关 while 循环的更多信息,但我不确定自己做错了什么。

这是我正在处理的代码片段,所以当我在 while 循环中使用 or 时,循环会无限期地执行。但是当我使用 AND 循环停止时有人可以解释一下吗?不应该根据定义使用 OR 吗?

void displayMenu() {
    char option;
    while (option != 'Q' or 'q') { //And or OR?
        cout << "P - Print numbers" << endl;
        cout << "A - Add a number" << endl;
        cout << "M - Display mean of the numbers" << endl;
        cout << "S - Display the smallest number" << endl;
        cout << "L - Display the largest number" << endl;
        cout << "Q- Quit" << endl;
        cout << "Choose Your Option-" << endl;
        cin >> option;
        if (option == 'P' or 'p')
            Print();
    }
}

你的病情(option != 'Q' or 'q')就像你说话一样。
“选项不是 upperQ 或 lowerQ”。
编译器将其理解为“option is not upperQ; or q”,其中“q”是一个非零的东西。非零值被解释为“真”。因此,即使 option 具有 'Y' 或 '2'.

这样的值,整个事情总是评估为“真”。

你必须用更少的口语改写为
“选项不是 'Q' 也不是 'q' “
并且您必须使用适当的运算符。使用额外的 () 来确保您的意思被理解不会造成伤害。

这样做是

( (option != 'Q') && (option != 'q') ) 

在某些情况下可以使用 or,或者在这种情况下 and 而不是逻辑 &&,并且也不需要额外的 ()。然而,主要问题是您选择“或”而不是“和”,并且使用 () 是一种安全的方法,只要您不太熟悉运算符及其在此类表达式中的评估顺序.

为什么你需要使用 &&(“和”)而不是 or|| 是两个有趣的字母会发生什么的问题。让我们以 'Q' 为例,它显然是您正在寻找的两个之一。但它不是'q'。所以条件的第二部分为真。使用 || 就足够了,整个事情被评估为“真”并且循环继续 - 显然不是你想要的。 'q' 也是如此,它不是 'Q' 而 || 继续。
你真正想要的是“两者都不是”,这与“不是这个也不是那个”是一样的。因此,您需要“不与不”,!a && !b 或更直截了当的明确 (option != 'Q') && (option != 'q').
这可以用运算符优先级的隐含知识(查找并尝试记住)改写为 option != 'Q' && option != 'q'.