对不起,这里的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 <<我刚读了下一终线(我认为)。 你们如何清除出这个问题的流或交易? 它必须是很常见的。
围绕与如果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()重置所有标志,以一个良好的状态。 拥有一大批直到“\ n”应该工作cin.ignore。
好吧,我找到了答案。 答案是...
不要这样做。 不要混合格式和无格式使用输入操作符>>。 下面是关于这个问题的好文章:
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;
}
cin.ignore(INT num_bytes_to_ignore); 会做的。
您还可以使用标准输入输出,fflush(FD); 其中fd是标准输出,标准错误,标准输入之一。
文章来源: How to cope with extraneous characters left on the input stream? (cin skipped)