2016-08-06 231 views
-3

我有這個代碼,它只是從另一個更大的代碼的一部分。這看起來像是一個非常簡單的錯誤,但我仍然無法弄清楚它是什麼。我的問題是,'house1'的值不能退出while循環並轉到switch語句。例如,如果我輸入house1 = 0,程序將打印「無效值,請再次輸入」,但如果我在輸入無效值後輸入了house1 = 1,它也會打印「無效值,請重新輸入」。有誰知道我的錯誤是什麼?while循環在c + +不能退出

cin >> house1 ; 
while ((0 <= house1) || (house1 >= 6)) 
{ 
    cout << "Invalid value! please enter again:"; 
    cin >> house1; 
} 
switch (house1) 
{ 
case '1': 
    h1_p1 = h1_p1 - 5; 
    h2_p1 = h2_p1 + 1; 
    h3_p1 = h3_p1 + 1; 
    h4_p1 = h4_p1 + 1; 
    h5_p1 = h5_p1 + 1; 
    house_p1 = house_p1 + 1; 
    break; 
case '2': 
    h2_p1 = h2_p1 - 5; 
    h3_p1 = h3_p1 + 1; 
    h4_p1 = h4_p1 + 1; 
    h5_p1 = h5_p1 + 1; 
    house_p1 = house_p1 + 2; 
    break; 
+1

'0 <= house1'我認爲這個是倒置的。因爲0 <= 1所以它會再次問你。 *還*案'1'和'案件1'不是同一件事。 while循環條件檢查整數值1,但您的case語句正在檢查*字符* 1的整數值。 – Borgleader

+0

仔細閱讀'while'語句中的條件。當'house1'等於0時它會做什麼? (另外請注意,該陳述中兩個比較的括號是多餘的) –

+1

我相信你想'(house1 <= 0)'而不是'(0 <= house1)'。 –

回答

1

如果你的意思是有效的值應介於15,病情應該是

while ((house1 <= 0) || (house1 >= 6)) 
{ 
    cout << "Invalid value! please enter again:"; 
    cin >> house1; 
} 

BTW:你不是house1檢查無效的輸入(的cinfailbit)。

1

這段代碼的主要問題是這種說法

while ((0 <= house1) || (house1 >= 6)) 

看看你進入0,1,2,3,4,5,6,7,...或任意正整數(如house1的值),這個while語句是針對正確的。

因此,控制進入while循環,並且不會從循環中出來,直到輸入負數...因爲只有當輸入負數時,while語句中的條件纔會滿足,並且控制會從循環中走出來。