对不起这里的noobish问题,但我只是在学习C ++,我正在寻找处理这个问题的标准方法。我正在使用VS2005。
给定一个程序:
#include <iostream>
using namespace std;
int main( )
{
while ( true )
{
cout << "enter anything but an integer and watch me loop." << endl;
int i;
cin >> i;
}
return 0;
}
如果输入除整数之外的任何内容,程序将永远不允许您再输入任何内容。现在,我意识到这是因为在格式失败后流上还有输入,所以每次调用cin&lt;&lt;我只是读到下一个结束行(我想)。你们如何清理流或处理这个问题?这一定很常见。
答案 0 :(得分:2)
用if覆盖cin调用。
如果读取了错误的数据,cin将返回false。
这样:
if (!cin >> i) {
cin.clear();
cin.ignore(INT_MAX, '\n');
cout << "Haha, your looping efforts have been thwarted dear sir\n";
}
cin.flush()应该诀窍(根据cppreference.com),但显然不是VS.
cin.clear()将所有标志重置为良好状态。 cin.ignore有一个很大的数字,直到'\ n'应该工作。
答案 1 :(得分:2)
好吧,我找到了答案。答案是......
不要这样做。请勿使用运算符&gt;&gt;混合格式化和未格式化的输入。这是一篇关于这个主题的好文章:
http://www.cplusplus.com/forum/articles/6046/
基本上,代码更改为:
#include <iostream>
#include <string>
#include <stream>
using namespace std;
int main( )
{
while ( true )
{
cout << "enter anything but an integer and watch me loop." << endl;
string input;
getline( cin, input );
int i;
stringstream stream( input );
if ( stream >> i ) break;
}
return 0;
}
答案 2 :(得分:0)
cin.ignore(int num_bytes_to_ignore);会做的。
你也可以使用stdio,fflush(fd);其中fd是stdout,stderr,stdin之一。