作者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/cn.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