- 論壇徽章:
- 0
|
初學(xué)C++,寫了一段代碼,本意想實(shí)現(xiàn)如下功能:
要求用戶輸入一個(gè)整數(shù),打印其值,若用戶輸入錯(cuò)誤的數(shù)據(jù)(比如輸入字母),則打印一條出錯(cuò)信息,然后讓用戶重新輸入。
代碼如下:
![]()
現(xiàn)在的問題是:
若用戶正確地輸入整數(shù),則沒有任何問題;但是用戶如果輸入錯(cuò)誤數(shù)據(jù),比如輸入字母'a',那么程序就會(huì)死循環(huán)打印出錯(cuò)信息“error,retry”,永遠(yuǎn)不會(huì)讓用戶進(jìn)行第二次輸入。而我的本意是只打印一次出錯(cuò)信息,然后等待用戶第二次輸入。
后來我想難道是cin輸入緩沖區(qū)需要刷新?但到處找也沒找到相關(guān)信息,于是死馬當(dāng)活馬醫(yī),在cin.clear()語句后面加了一句cin.get(),結(jié)果就可以達(dá)到我的目的了,我不清楚的就是為什么會(huì)這樣?希望大家能夠幫我解釋一下。難道是編譯器的問題嗎?
附修改后能正確運(yùn)行的代碼:
。
。
。
cout << "error,retry" << endl;
cin.clear();
cin.get();
。
。
。 |
|