2014-12-11 159 views
-2

我試圖建立一個小程序,包括while循環:爲什麼我while循環導致無限輸出

int main() { 
    int x = 0; 
    int y = 0; 
    while (x != '|' || y != '|') { 
     cout << "Please enter two numbers: \n"; 
     cin >> x >> y; 
     cout << "You entered: " << x << " and " << y << "\n\n" << endl; 
    } 
    return 0; 
} 

我編譯並與Visual Studio我的兩個窗戶框和我的Linux中運行,而當我的終端/ cmd填補了無限循環無限的填充要求。我搜索了很多地方,找不到明確的答案。我試圖讓無限的同時把break參數放在裏面無濟於事。我有一種感覺,它應該把垂直符號放在一個整數中,但是我的循環運行得很好。我所要求的教訓是,我的解決方法是'好的',但想知道一個乾淨/標準的做法。

+0

你的假設是正確的。如果你期望輸入'''',你不應該使用'int'。我看起來像你還沒有決定你的變量是否持有'char'或'int'。 – 2014-12-11 03:03:10

+0

與您比較的''|''字符的整數值並不是您給予'cin >> x;'字符串「|」時得到的值。 – chris 2014-12-11 03:04:33

回答

0

無限循環是因爲您從不檢查輸入失敗。行cin >> x >> y後添加:

if (!cin) 
    break; 

記住,xy是整數,所以他們只能存儲數量。當您編寫時,您正在測試該人是否成功輸入了與|的ASCII字符代碼相匹配的編號。如果您想要檢查輸入的人物的每個字符,請改爲輸入string

+0

這有效,但是如果聲明做了什麼呢?我無法理解!cin部分。我也認爲代碼將是相同的,並且int會匹配打破陳述。 – BleuGamer 2014-12-11 03:15:24

+1

流有錯誤標誌。當你將一個流轉換爲'bool'時(例如,當它執行'!'時),如果有錯誤標誌,它會給出'false'。當通過'>>'提取失敗時,會設置一個錯誤標誌。所以'if(!cin)break;'如果提取失敗就會中斷。 – 2014-12-11 03:18:56

+0

噢...謝謝!我明白髮生了什麼事。 – BleuGamer 2014-12-11 03:22:17

相關問題