[问题] 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