2016-01-20 64 views
0

我正在運行一個while循環,將花費用戶輸入的花車並將它們加在一起,直到其他東西放在輸入。C++ - 運行while循環與cin後,程序將不會再次輸入

while(cin >> input) 
{ 
    price += input; 
    cout << "Next price: "; 
} 

在此之後,我有用戶輸入他們花了多少錢:

cout << "Enter the amount paid: "; 
cin >> paid; 
cout << "You paid: " << paid << endl; 

運行程序時,循環執行罰款,我可以總價正確地得到它cout,但它跳過cin >> paid;行並將輸出爲You paid: nan

我試圖把環和下一個輸入之間cin.clear(),但隨後在運行它時,輸出爲:You paid: 0

我需要改變我的while循環或使用不同的版本來清除輸入?我對C++很陌生。謝謝!

+2

我看到與代碼中的許多問題。看看這篇關於如何在類型安全的情況下從cin獲取數據的文章:http://www.cplusplus.com/forum/articles/6046/ – GrGom

+0

看看'getline(..)'。 – Poriferous

+0

用戶輸入的「別的東西」仍在輸入緩衝區中等待。在閱讀另一個號碼之前,您必須將其刪除,例如「已付費」。 –

回答

5

當您使用cin.clear()時,它將重置錯誤標誌。但是,數據流中的數據仍然存在。在嘗試閱讀paid之前,您需要忽略該行的其餘部分。

cin.clear(); 
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 

確保添加#include <limits>使用std::numeric_limits