gpt4 book ai didi

c++ - 请解释为什么这些逻辑运算符在 CPP 中没有正常工作

转载 作者:行者123 更新时间:2023-12-05 08:15:55 24 4
gpt4 key购买 nike

抱歉,如果这是一个菜鸟问题或格式很奇怪,我是编程新手,也是 StackOverflow 新手。因此,我和我的兄弟试图编写一个短程序,该程序使用一个 do-while 循环和其中的一个 switch 语句。这是说明我们遇到的问题的代码的简短版本。

#include <iostream>

int main()
{
char selection{};

do {
std::cin >> selection;
switch (selection) {
case 'P':
case 'p':
std::cout << "This doesn't work";
case 'Q':
case 'q':
std::cout << "Okay, goodbye!";
break;
}
} while ( selection != 'Q' || selection != 'q');
}

令我们感到困惑的是,当我们运行这个程序时,选择 Q 或 q 并没有像我们希望的那样退出循环。如果我没记错的话(很可能是记错了)“!=”基本上是在说“不等于”。所以 while 的最后一行应该等同于“while selection is not equal to Q or selection is not equal to q”,其中每当 selection 等于 Q 或 q 时,while 的计算结果为 false,并退出循环。

但是,当我们运行循环时,它的计算结果永远不会为 false,只会一直继续下去,要求我们进行选择。经过一个小时左右的谷歌搜索,我们找到了两个按照我们想要的方式运行的解决方案之一。 A: while (!( selection == 'Q' || selection == 'q')) 或 B: while (selection != 'Q' && selection != 'q')。无论哪种情况,循环都会成功退出,程序会按照我们希望的方式运行。

这很好,但是无论我们在网上阅读什么,我们都找不到很好的解释来解释为什么原始代码没有按照它看起来应该的方式运行。我和我的兄弟得出的结论是,它要么与优先级/关联性有关,要么与逻辑运算符相互作用的方式有关。如果有人能给我们一个有根据的答案,说明为什么原始代码没有按照我们认为的方式运行,我们将不胜感激。

最佳答案

非常仔细地阅读条件(selection != 'Q' || selection != 'q'),逐个标记:

“做...虽然选择不等于'q'或不等于'q'”。

由于 selection 不能同时为 q 和 Q,因此总是出现不等于 q 或不等于 Q 或两者兼而有之的情况。

你的意图是说“做......而选择既不是'q'也不是'Q'”。可以翻译为:

!(selection == 'q' || selection == 'Q')

应用 DeMorgan identity允许您将其重写为:

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

它在结构上相似,但与您的原始条件略有不同,因为它使用 && 而不是 ||。区别在于对 bool 逻辑/ bool 代数的简单而常见的1 误解,而不是运算符优先级或结合性。

1 从在 ECE 系辅导数字设计以及辅导 CS 的背景下

关于c++ - 请解释为什么这些逻辑运算符在 CPP 中没有正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65755996/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com