2013-06-20 60 views
2
#include <iostream> 
#include <string> 

using namespace std; 

int main() 
{ 
    string option; 
    cout << "Would like water, beer, or rum?--> "; 
    cin >> option; 
    while(option != "water" || option != "beer" || option != "rum") 
     { 
     cout << "You did not choose a valid option. Try again.\n"; 
     cout << "Would you like water, beer, or rum?-->"; 
     cin >> option; 
     } 
} 

爲什麼這個代碼不會退出循環,即使用戶輸入正確的選項?C++雖然循環不工作

回答

2

您的|| s應該是&& s,因爲option只能有一個值。

while (option != "water" && option != "beer" && option != "rum") 
{ 
    // ... 
} 
+0

@ user1816640沒問題。 – 0x499602D2

3

您正在使用錯誤的邏輯運算符。你想所有你的條件爲真(option不等於水,不等於啤酒,不等於朗姆酒),所以你應該使用&&)。 ||)表示如果條件爲的任何爲真,則表達式爲真,並且由於這些值是互斥的,所以始終是這種情況,因此是無限循環。

11

瞭解你的病情大聲 - 「運行循環,而option不是"water"option不是"beer" ...」。

什麼時候該停止?

1

這種說法始終是真實的:

option != "water" || option != "beer" || option != "rum" 

如果option是「水」,那就不是「啤酒,」因此說法是正確的。如果option是「啤酒」,這不是「水」,所以說法是正確的(假設你有一個很好的啤酒,當然)。

我想你的意思是寫

option != "water" && option != "beer" && option != "rum" 

這樣,只要option具有這些值中的任何一個,循環將退出。

希望這會有所幫助!

0

幾乎總是!= ||序列是錯誤的,應該使用& &。如果一個比較失敗了,其他的都是真的,那麼整個條件總是如此。如果你不是不平等的人,你肯定是不平等的。

有了經驗,你會看到這樣的結構癢癢。

0

可以使用的容器來存儲有效選項,並檢查是否選擇在容器:

set<string> validOptions = { "water", "beer", "rum"}; 

while(validOptions.count(option) == 0) { 
    // .. etc 
}