为什么我的程序一直进入我的输入验证循环?
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
。
好吧,我确定我缺少的东西真的很少,但这是我所拥有的:
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
。