Re: [問題] 只允許輸入數字,非輸入數字會迴圈請你 …

看板C_and_CPP (C/C++)作者 (我要加入劍道社!)時間15年前 (2011/07/08 10:15), 編輯推噓9(905)
留言14則, 10人參與, 最新討論串3/4 (看更多)
cin 的簡單解法: int score; cin >> score; while(cin.fail() && !cin.eof()){ cin.clear(); // 清除 error flag cin.sync(); // 清除 buffer 中的無效字元 cin >> score; } if(cin.eof()) throw runtime_error("EOF during input") -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.15.163

07/08 11:15, , 1F
喔喔 還有 sync() ,推一個
07/08 11:15, 1F

07/08 11:50, , 2F
推,原來還有這招
07/08 11:50, 2F

07/08 12:39, , 3F
推!
07/08 12:39, 3F

07/08 13:07, , 4F
還有這招!
07/08 13:07, 4F

07/08 13:20, , 5F
又學到一招
07/08 13:20, 5F

07/08 13:27, , 6F
o.O此板強者很多
07/08 13:27, 6F

07/08 13:41, , 7F
真可怕...
07/08 13:41, 7F

07/08 13:56, , 8F
cin.sync();->cin.ignore();也可
07/08 13:56, 8F

07/08 13:57, , 9F
只是要搭配numeric_limits<streamsize>::max()
07/08 13:57, 9F

07/08 13:59, , 10F
那個,姑且不論 sync(), ignore() 本身有一些差異,
07/08 13:59, 10F

07/08 13:59, , 11F
但此例,似乎 ignore 會比 sync 慢一點.
07/08 13:59, 11F

07/08 20:13, , 12F
一開始 EOF 程式就不會結束了... 還是說本來就要這樣 xDDD
07/08 20:13, 12F
我發現我誤解了 fail bit http://www.cplusplus.com/reference/iostream/ios/fail/ The function returns true if either the failbit or the badbit is set. At least one of these flags is set when some error other than reaching the End-Of-File occurs during an input operation. 雖然講了 "other than reaching the End-Of-File" 不過的確遇到 EOF 的時候 fail bit 也會被設為 true. 不過這邊也只能用 fail bit 去檢查 (bad bit 應該是用於 I/O error) 所以前面要加上對 eof 的處理 ※ 編輯: littleshan 來自: 118.168.83.226 (07/08 20:37) ※ 編輯: littleshan 來自: 118.168.83.226 (07/08 20:50)

07/08 22:09, , 13F
害我手癢也想發一篇...
07/08 22:09, 13F

07/08 22:13, , 14F
板主快發吧
07/08 22:13, 14F
文章代碼(AID): #1E5cXUVm (C_and_CPP)
文章代碼(AID): #1E5cXUVm (C_and_CPP)