用C++中的if/else语句验证输入值

问题描述:

所以我环顾四周,但我显然不是在正确的地方寻找,或者我误解了某些东西。用C++中的if/else语句验证输入值

给出的指示是,程序只能接受2.0和5.0之间的穹顶高度值。我感觉它与我的条件有关,但我不知道如何纠正它。

当我在调试过程中输入高度时,它跳到我的else语句,并没有给我一个机会来重新输入新的输入。

//Retrieving name and first vault and date 
cout << "Please enter the name of the pole vaulter.\n"; 
getline(cin, name); 
cout << "Please enter the height of the first vault attempt.\n"; 
cin >> vault1; 
if(5.0 >= vault1 >= 2.0) { 
    cout << "What date was this vault accomplished?\n"; 
    getline(cin, date1); 
} else { 
    cout << "Only jumps between 2.0 meters and 5.0 meters are valid inputs.  Please enter the height of the first vault attempt.\n"; 
    cin >> vault1; 
    cout << "What date was this vault accomplished?\n"; 
    getline(cin, date1); 
} 

表达

5.0>=vault1>=2.0 

应在Python正常工作,但在C++中它解析为

(5.0>=vault1) >= 2.0 

其中第一比较的结果进行比较,2.0,产生无义的结果。

在C++写的,而不是作为

2.0 <= vault1 && vault1 <= 5.0 

如果执行此检查在多个地方,那么它可以帮助在清晰度和可维护性定义一个适当命名的布尔函数。

+0

是的,检查正在对所有三个金库高度输入执行。\ – 2013-02-09 02:12:07

+0

我希望我能为最后一句话+2。 – Johnsyweb 2013-02-09 02:12:26

+0

@HeatherT你在缓冲区中有一个流浪'\ n'。 – Rapptz 2013-02-09 02:19:19

C++不支持数学表达式。

变化:

if (5.0>=vault1>=2.0) 

要:

if (vault1 > 5.0 || valut1 < 2.0) 
{ 
    // invalid vault1 
} 
else 
{ 
    // valid vault1 
} 

或者如果你想使用&&

if (vault1 <= 5.0 && valut1 > 2.0) 
{ 
    // valid vault1 
} 
+0

谢谢比尔兹!我认为这是这样的,但我不知道如何解决它。 – 2013-02-09 02:06:11

+0

不应该是'if(vault1 = 2.0)'?既然这是一个数学表达式? – Rapptz 2013-02-09 02:06:50

+0

@Rapptz:不,他正在检查*无效*。但是,他弄错了包容性的东西...... – 2013-02-09 02:07:47