作者zianz113 (zianz113)
看板C_and_CPP
標題[問題] cin overflow問題
時間Fri Sep 15 15:00:49 2017
開發平台(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://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1505458851.A.ED1.html
1F:→ enonrick: 用字串接 再判斷 09/15 15:19
2F:→ zianz113: 謝謝 我剛剛換關鍵字google找到一篇先字串接 接完再判 09/15 15:22
3F:→ zianz113: 斷的 09/15 15:22
4F:→ zianz113: 所以直接用int/double接輸入本身就是不保險的做法? 09/15 15:23
5F:→ enonrick: bug不說,只要有人為操作~保護就要做好做滿 09/15 15:26
6F:→ zianz113: 瞭解 09/15 15:40
7F:→ a27417332: 如果輸入的數字超出型態可存的範圍,有failbit會被設置 09/15 15:52