作者jimfan (jimfan)
看板C_and_CPP
标题Re: [问题] cin overflow问题
时间Fri Sep 15 22:40:21 2017
<iostream> 毕业後就无再用了... 正好实验一下,发现 cin.clear() 与
cin.ignore() 应该是你指的“重置输入buffer“,留意 break 与 continue 的使用:
#include <iostream>
#include <climits>
using namespace std;
void montePI(int k) { }
int main(void)
{
cout << "INT_MAX = " << INT_MAX << endl << endl; // 可用此数+1顶爆int i看看
int i = 0;
while (1)
{
cout << "PROMPT> " << flush; // 让我知道 cin 正在作用
cin >> i;
if (cin.eof())
{
cout << "End of data, bye" << endl;
break;
}
else if (cin.fail()) // 侦测 overflow, format 问题...等等
{
cout << "Bad input, skipped and continue" << endl;
// "重置输入buffer"
cin.clear();
cin.ignore(INT_MAX, '\n');
continue;
}
else if (i==0) // EOF 好了,这样有点怪
{
cout << "Found 0, exit" << endl;
break;
}
montePI(i);
}
return 0;
}
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 14.199.97.157
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1505486423.A.E1B.html
1F:→ zianz113: 谢谢你! 解释很清楚 只是ignore部分我还有点疑问 09/16 01:55
2F:→ zianz113: 会在研究一下ignore的使用 总觉得还是无法100%防止人 09/16 01:56
3F:→ zianz113: 为问题 09/16 01:56