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



我正在处理工作簿中的一个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不等于红、蓝或黄色,则返回错误代码。

我似乎不明白自己做错了什么。有人能带我走过这个吗?

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"))

意思是,";如果input1不是这三个选项中的任何一个input2不是其他三个选项,则输入不正确">

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

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...

相关内容

  • 没有找到相关文章

最新更新