为什么我的程序一直进入我的输入验证循环?

Why does my program keep going into my input validation loop?

好吧,我确定我缺少的东西真的很少,但这是我所拥有的:

 int main()   
 {
        string red = red, blue = blue, yellow = yellow, color1, 
        color2, mixResult;

        cout << "Please enter a primary color." <<endl;
        cin >> color1;

        while ((color1 != red) || (color1 != blue) || (color1 != yellow))
        { 
         cout << "Error!: Please enter a primary color." <<endl;
         cout << " *NOTE ALL ENTRIES MUST BE LOWERCASE* " <<endl;
         cin >> color1;
        }

现在出于某种原因,每次我 运行 执行此操作并输入例如红色时,程序都会进入 while 循环,这是不应该的。任何帮助将不胜感激。我可以展示更多我的代码,我正在使用#include

while ((color1 != red) || (color1 != blue) || (color1 != yellow))

因为color1只能是一个值,除非red == blue == yellow,这个循环将永远运行。你的意思大概是

while ((color1 != red) && (color1 != blue) && (color1 != yellow))

此外,正如其他人指出的那样,您需要通过用引号将文本括起来来正确初始化字符串变量:

string red = "red", blue="blue", yellow="yellow"

否则你所做的相当于:

string red; // red is an uninitialized string
red = red;  // no kidding?! :)

你的 while 循环看起来不对。应该是这样的。

修复: while ((color1 != red) && (color1 != blue) && (color1 != yellow)) //如果输入不等于这些颜色中的任何一种。

你的 while ((color1 != red) || (color1 != blue) || (color1 != yellow))//如果输入为红色,则第一个条件为假,第二个和第三个条件为真。这就是它循环的原因。

您将颜色初始化为其自身,这是未定义的行为。请改用字符串常量。你应该使用&&,而不是||。

正确代码:

#include <iostream>
#include <string>

using namespace std;
int main()
{
    string red = "red", blue="blue", yellow="yellow", color1;

    cout << "Please enter a primary color." <<endl;
    cin >> color1;

    while ((color1 != red) && (color1 != blue) && (color1 != yellow))
    {
        cout << "Error!: Please enter a primary color." <<endl;
        cout << " *NOTE ALL ENTRIES MUST BE LOWERCASE* " <<endl;
        cin >> color1;
    }
}

就像其他人所说的那样,问题是暂时的。在这种情况下,您必须使用 &&

这样想,如果 color1 被赋值 "blue",它不是 "red" 因此条件 color1 != "red"TRUE .

其余值也是如此,因此即使 color1 的值是可接受的值之一,整个条件仍将是 TRUE