逻辑 AND OR 运算符和一个简单的 C++ 问题

Logical AND OR Operators and a simple C++ problem

提问人:supermage 提问时间:7/29/2022 最后编辑:mkrieger1supermage 更新时间:7/29/2022 访问量:225

问:

我正在处理我的工作簿中的 c++ 问题,我很难处理这个问题(以及我遇到的许多其他问题)中逻辑运算符的行为。

代码如下:

#include <iostream>


using namespace std;



int main()
{
string input1, input2;

cout << "Enter two primary colors to mix. I will tell you which secondary color they make." << endl;
cin >> input1;
cin >> input2;


if ((input1 != "red" && input1 != "blue" && input1 != "yellow")&&(input2 != "red" && input2 != "blue" && input2 != "yellow"))
{
    cout << "Error...";
}

else
{
    if (input1 == "red" && input2 == "blue")
    {
        cout << "the color these make is purple." << endl;
    }
    else if (input1 == "red" && input2 == "yellow")
    {
        cout << "the color these make is orange." << endl;
    }
    else if (input1 == "blue" && input2 == "yellow")
    {
        cout << "the color these make is green." << endl;
    }
    
}





system("pause");
return 0;
}

代码的工作方式应与编写方式相同。嗯,差不多。我需要用户输入来满足某些条件。如果用户输入红色、蓝色或黄色以外的任何颜色,我需要程序显示错误消息。它不会像它写的那样这样做。但是按照原来的写法,它只会给我一个错误消息,即使我会输入必要的颜色。例如:

if ((input1 != "red" || input1 != "blue" || input1 != "yellow")&&(input2 != "red" || 
input2 != "blue" || input2 != "yellow"))

我试图用伪代码来推理这个问题,看看它是否有意义,而且似乎确实如此。这是我的推理: 如果 input1 不等于红色、蓝色或黄色,并且 input2 不等于红色、蓝色或黄色,则返回错误代码。

我似乎无法弄清楚我做错了什么。有人可以带我完成这个吗?

c++ 布尔逻辑

评论

0赞 molbdnilo 7/29/2022
您的条件不会说“input1 不等于红色、蓝色或黄色”,而是说“input1 不等于红色,或者 input1 不等于蓝色,或者 input1 不等于黄色”。“A或B”的否定——即“既不是A也不是B”——不是“不是A或不是B”,而是“不是A也不是B”。

答:

6赞 Quimby 7/29/2022 #1

input1 != "red" || input1 != "blue"始终为 true,请尝试考虑这将返回 false 的输入。它必须同时等于 和 ,这是不可能的。redblue

如果你想要“如果输入不是任何选项”,你需要. 我认为您首先想要以下内容:input1 != "red" && input1 != "blue"if

if((input1 != "red" && input1 != "blue" && input1 != "yellow") 
   || (input2 != "red" && input2 != "blue" && input2 != "yellow"))

意思是,“如果不是这三个选项中的任何一个,或者不是其他三个选项中的任何一个,则输入不正确。input1input2

通常,将这些子表达式放入临时变量中,并学习使用调试器来调试代码。

评论

0赞 supermage 7/30/2022
啊,它现在正在点击!我知道不注意离散结构中的逻辑部分会回来咬我!!哈哈 但是感谢您的反馈!我很感激。
2赞 selbie 7/29/2022 #2

Quimby 通过回答您的具体问题来引导您朝着正确的方向前进。我想提出另一个问题并提出一个建议:

如果我输入“红色”然后输入“蓝色”,您的程序将打印“紫色”。但是,如果我输入“蓝色”然后输入“红色”(相反的顺序),您的程序将不会像我预期的那样打印“紫色”。

同样,如果键入“红色”然后键入“红色”,我希望您的程序打印“这些颜色是红色”。您的程序也不会这样做。

有一个简单的解决方法是使用所选颜色的布尔值:

cin >> input1;
cin >> input2;

bool hasRed = (input1 == "red") || (input2 == "red");
bool hasBlue = (input1 == "blue") || (input2 == "blue");
bool hasYellow = (input1 == "yellow") || (input2 == "yellow");

bool isPurple = hasRed && hasGreen;
bool isOrange = hasRed && hasYellow;
bool isGreen = hasBlue && hasYellow;
bool isRed = hasRed && !hasYellow && !hasBlue;
bool isBlue = hasBlue && !hasYellow && !hasRed;
bool isYellow = hasYellow && !hasRed && !hasBlue;

那么你的打印语句是类似的:

if (isPurple) {
   cout << "You've got purple" << endl;
}
else if (isOrange) {
   cout << "You've got orange" << endl;
}
etc...

评论

0赞 supermage 7/30/2022
非常感谢您的建议!我认为这有助于大大简化问题。