2015-11-19 26 views
0

無限循環所以我想接受兩個輸入,一個字符串和一個int,並且當用戶輸入「結束」退出循環。 我的問題是,當輸入「end」時,它被卡在一個循環中,因爲(我假設)當用戶只輸入一個時它需要兩個輸入。 我已經做了一些研究,發現丟棄輸入並重置它與cin.ignore()cin.clear()重置它,但是,這些似乎只適用於接受單一輸入,因爲我要求在一條線上的兩個單獨的輸入,並且它似乎沒有工作。 我的代碼正在做的事情基本上是要求一個事物列表(名稱值),將它存儲在一個類的數組中,並且限制爲10個項目。所以,當輸入「結束」時,它只需要退出while循環。其他一切似乎都很好,即當我輸入10個項目時,它退出循環,其餘代碼按照它應該執行的方式執行。所以在輸入'end'時似乎有問題。 (p.s. a是一個int類型的字符串和b)。 的代碼段是:如何停止由於無效輸入C++

do { 

    cout << "Enter the item and value (enter 'end' to stop): "; 
    cin >> a >> b; 

    items1.set_name(a, i); 
    items1.set_price(b, i); 

    i++; 

} while (i < 10 && a != "end"); 

這似乎應該是很簡單的,我很抱歉,如果一個愚蠢的問題,但我不能弄明白HAHAH。 非常感謝您的幫助。

+1

什麼類型的了'和'B'的'? – Chad

+0

可能的重複[爲什麼如果我輸入一個字母而不是數字會得到一個無限循環?](http://stackoverflow.com/questions/19521320/why-do-i-get-an-infinite-loop- if-i-enter-a-letter-than-a-number) – Galik

+0

輸入後,您不會測試流狀態。在處理數據之前有一個最後的'f(cin)'。 –

回答

2

在繼續閱讀b之前,您需要測試a的值;是這樣的:

cin >> a; 
if(a == "end") 
    break; 
cin >> b; 
+0

它的工作原理也很簡單,呵呵。謝謝您的幫助! –

0

要退出循環,使用

if (a == "end" || b == "end") break;