Re: [問題] cin overflow問題

看板C_and_CPP作者 (jimfan)時間8年前 (2017/09/15 14:40), 編輯推噓0(003)
留言3則, 1人參與, 最新討論串2/2 (看更多)
<iostream> 畢業後就無再用了... 正好實驗一下,發現 cin.clear() 與 cin.ignore() 應該是你指的“重置輸入buffer“,留意 break 與 continue 的使用: #include <iostream> #include <climits> using namespace std; void montePI(int k) { } int main(void) { cout << "INT_MAX = " << INT_MAX << endl << endl; // 可用此數+1頂爆int i看看 int i = 0; while (1) { cout << "PROMPT> " << flush; // 讓我知道 cin 正在作用 cin >> i; if (cin.eof()) { cout << "End of data, bye" << endl; break; } else if (cin.fail()) // 偵測 overflow, format 問題...等等 { cout << "Bad input, skipped and continue" << endl; // "重置輸入buffer" cin.clear(); cin.ignore(INT_MAX, '\n'); continue; } else if (i==0) // EOF 好了,這樣有點怪 { cout << "Found 0, exit" << endl; break; } montePI(i); } return 0; } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 14.199.97.157 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1505486423.A.E1B.html

09/16 01:55, , 1F
謝謝你! 解釋很清楚 只是ignore部分我還有點疑問
09/16 01:55, 1F

09/16 01:56, , 2F
會在研究一下ignore的使用 總覺得還是無法100%防止人
09/16 01:56, 2F

09/16 01:56, , 3F
為問題
09/16 01:56, 3F
文章代碼(AID): #1Pk-PNuR (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1Pk-PNuR (C_and_CPP)