2014-03-04 146 views
1

的說明行爲我有以下程序:C++:幫助簡單的程序

int a, b; 
while (true) 
{ 
    a = 0; b = 0; 
    cout << "Enter input..." << endl; 
    cin >> a >> b; 
    cout << "You entered:" << endl; 
    cout << a << endl << b << endl; 
} 

現在程序按預期工作時,我提供 預期數字輸入(即,「10 20」)。 不過,如果我輸入如「AB」一些虛假的輸入, 程序進入一個無限循環瓦特/輸出如下:

輸入輸入... 您輸入:輸入輸入.. 。 您輸入: ...等等

有人能解釋爲什麼/如何發生的?

+1

如果讀操作成功,你不檢查(和清除,如果它沒有)解析。 – Borgleader

回答

3

CIN需要被刷新......

基本上你無法讀取「A B」爲數字,你在相同的條件下環繞回來。

,但最好的做法也許應該是讀入一個字符串,然後從字符串

+2

爲了澄清,在循環的第二次(以及所有未來)迭代中,輸入緩衝區仍然包含「a b」,所以'cin'語句立即返回(並失敗)。 – MooseBoys

1

看到這篇文章:

Basic Input/Output C++

在發生例如如果用戶輸入別的東西不能被解釋爲一個整數上面有什麼?那麼,在這種情況下,提取操作就會失敗。默認情況下,程序繼續不設置變量值i

要停止這種情況發生,您應該檢查收到的輸入是否實際上是一個整數。

如上所述,也許嘗試類似stringstream的東西,然後解析字符串。

+1

碰巧,這是我編寫這段代碼時所遵循的文章。我知道它說這個程序會繼續,所以我希望它能夠循環,並再次要求我輸入。沒有意識到,如果前一次調用失敗,它會在「cin」中保留輸入...導致它重新進行故障轉移。 – Cod3Citrus