为什么我的程序会继续进入我的输入验证循环?

时间:2016-02-18 18:22:19

标签: c++ string while-loop operators

好的,我确定我失踪的东西真的很少,但这就是我所拥有的:

 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

4 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:0)

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?! :)

答案 2 :(得分:0)

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

正确的代码:

#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;
    }
}

答案 3 :(得分:0)

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

这样想,如果为color1分配的值为&#34;蓝色&#34;,则不是&#34;红色&#34;因此条件color1 != "red"TRUE

这同样适用于其余值,因此即使TRUE的值是可接受的值之一,整个条件仍将是color1