为什么我的程序不断进入我的输入验证循环

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

本文关键字:我的 输入 验证 循环 程序 为什么      更新时间:2023-10-16

好的,我确定我错过的东西很少,但这是我所拥有的:

 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 循环看起来不对。 应该是这样的。

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

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

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

正确的代码:

#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被分配了一个值"蓝色",它不是"红色",因此条件color1 != "red" TRUE

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

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