2013-02-09 39 views
0

所以我環顧四周,但我顯然不是在正確的地方尋找,或者我誤解了某些東西。用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); 
} 

回答

4

表達

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

1

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 <= 5.0 && vault1> = 2.0)'?既然這是一個數學表達式? – Rapptz 2013-02-09 02:06:50

+0

@Rapptz:不,他正在檢查*無效*。但是,他弄錯了包容性的東西...... – 2013-02-09 02:07:47