[問題] cin overflow問題

看板C_and_CPP作者 (zianz113)時間6年前 (2017/09/15 15:00), 編輯推噓0(009)
留言9則, 3人參與, 最新討論串1/2 (看更多)
開發平台(Platform): (Ex: Win10, Linux, ...) WIN10 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) VS2013 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) <time.h> <iostream> while(1){ int i; cin >> i ; if(i==0)break; else if(i<0){ cout << "overflow or invalid input\n"; i=0; cin.clear(); } else { cout << montePI(i) << endl; } cin.get(); } 以上是簡略過的code,int i是我要抓給montePI的輸入項(需要正整數)。 cin.get()拿來清理'\n' 設定當輸入為0時代表程式結束。 我想問的問題是,如果假設輸入一定是數字,但有可能超過int的範圍, 即使unsigned還是有超過2^8-1,想問我該怎麼偵測比較恰當, 以及,當錯誤發生時,我該怎麼重置輸入buffer的狀態比較好? 目前有時候i回保留上一次的輸入結果, 不確定是buffer沒清乾淨還是其他問題。 可以只給我goole的方向,讓我自己先研究研究,新手問題麻煩各位了~ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.138.176.65 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1505458851.A.ED1.html

09/15 15:19, , 1F
用字串接 再判斷
09/15 15:19, 1F

09/15 15:22, , 2F
謝謝 我剛剛換關鍵字google找到一篇先字串接 接完再判
09/15 15:22, 2F

09/15 15:22, , 3F
斷的
09/15 15:22, 3F

09/15 15:23, , 4F
所以直接用int/double接輸入本身就是不保險的做法?
09/15 15:23, 4F

09/15 15:26, , 5F
bug不說,只要有人為操作~保護就要做好做滿
09/15 15:26, 5F

09/15 15:40, , 6F
瞭解
09/15 15:40, 6F

09/15 15:52, , 7F
如果輸入的數字超出型態可存的範圍,有failbit會被設置
09/15 15:52, 7F

09/15 15:53, , 8F
09/15 15:53, 8F

09/15 15:57, , 9F
09/15 15:57, 9F
文章代碼(AID): #1PktgZxH (C_and_CPP)
文章代碼(AID): #1PktgZxH (C_and_CPP)