[問題] cin overflow問題

作者: zianz113 (zianz113)   2017-09-15 15:00:49
開發平台(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的方向,讓我自己先研究研究,新手問題麻煩各位了~
作者: enonrick (EnonRick)   2017-09-15 15:19:00
用字串接 再判斷
作者: zianz113 (zianz113)   2017-09-15 15:22:00
謝謝 我剛剛換關鍵字google找到一篇先字串接 接完再判斷的所以直接用int/double接輸入本身就是不保險的做法?
作者: enonrick (EnonRick)   2017-09-15 15:26:00
bug不說,只要有人為操作~保護就要做好做滿
作者: zianz113 (zianz113)   2017-09-15 15:40:00
瞭解
作者: a27417332 (等號卡比)   2017-09-15 15:52:00
如果輸入的數字超出型態可存的範圍,有failbit會被設置https://goo.gl/RFCb92https://goo.gl/5uYJcu

Links booklink

Contact Us: admin [ a t ] ucptt.com