C++ c++;:cin.clear()不会重置流
我的问题是,如果发生错误,我无法重置C++ c++;:cin.clear()不会重置流,c++,C++,我的问题是,如果发生错误,我无法重置cin的流。例如,如果我在需要int时输入一个字符串,然后清除流,当循环到下一次时,我仍然会到达cin.fail()-if 有什么帮助吗 我的代码如下: int main() { int i; while(cin>>i,!cin.eof()) { if(cin.fail()) { cin.clear(); continue; }
cin
的流。例如,如果我在需要int时输入一个字符串,然后清除流,当循环到下一次时,我仍然会到达cin.fail()-if
有什么帮助吗
我的代码如下:
int main()
{
int i;
while(cin>>i,!cin.eof())
{
if(cin.fail())
{
cin.clear();
continue;
}
cout<<i<<endl;
}
system("pause");
}
intmain()
{
int i;
而(cin>>i,!cin.eof())
{
if(cin.fail())
{
cin.clear();
继续;
}
cout嗯,字符串仍然在那里,因为您还没有提取它。所以
下次读取也将失败。您需要使用cin。忽略跳过
非法字符。嗯,字符串仍然存在,因为您尚未提取它。因此
下次读取也将失败。您需要使用cin。忽略跳过
非法字符。使用如下内容:
int i;
while(cin>>i,!cin.eof())
{
if(cin.fail())
{
cin.clear();
string dummy;
cin >> dummy;
continue;
}
cout<<i<<endl;
}
inti;
而(cin>>i,!cin.eof())
{
if(cin.fail())
{
cin.clear();
虚拟字符串;
cin>>假人;
继续;
}
不能使用类似以下内容:
int i;
while(cin>>i,!cin.eof())
{
if(cin.fail())
{
cin.clear();
string dummy;
cin >> dummy;
continue;
}
cout<<i<<endl;
}
inti;
而(cin>>i,!cin.eof())
{
if(cin.fail())
{
cin.clear();
虚拟字符串;
cin>>假人;
继续;
}
您不需要在循环表达式中使用!cin.eof()
,因为>
运算符返回流,并且可以在布尔表达式中使用它。@JoachimPileborg除了这里,他只想在错误不是由于eof引起的情况下循环。您不需要!cin.eof()
在循环表达式中,因为
运算符返回流,可以在布尔表达式中使用。@JoachimPileborg,除了这里,他只想在错误不是由于EOF引起的情况下循环。嗯,我想我没有正确使用它,因为它不起作用。你能将它添加到我的示例代码中吗?我已经尝试将它添加到上面的if中在cin.clear()下,但没有用。Edit:通过找到另一个线程使其工作。它使用:cin.clear();cin.ignore(numeric_limits::max(),'\n');
嗯,我想我没有正确使用它,因为它不工作。你能将它添加到我的示例代码中吗?我已经尝试将它添加到if,在cin.clear()的上面和下面,但无效。编辑:通过查找另一个线程使其工作。它使用:cin.clear();cin.ignore(numeric_limits::max(),'\n');