读书人

C++流的有关问题

发布时间: 2012-03-19 22:03:05 作者: rapoo

C++流的问题
#include <iostream.h>
#include <stdlib.h>

int main()
{
int ival;
while(cin> > ival,!cin.eof())
{
if(cin.bad())
{
exit(1);
}
if(cin.fail())
{
cerr < < "bad date ";
cin.clear(istream::failbit);


continue;
}
cout < <ival < <endl;
}
return 0;
}
为什么输入错误后老是无限输出bad date;
我不是设了cin.clear(istream::failbit)了


[解决办法]
if(cin.fail())
{
cerr < < "bad date ";
cin.clear(istream::failbit);
continue;
}
==》
if(cin.fail())
{
cerr < < "bad date ";
cin.clear(); //清除所有的错误标记
continue;
}

[解决办法]
通常 failbit 和 badbit 错误标志是同时被置位的,
仅仅清除 failbit 还是cerr ..
[解决办法]
还需要清除缓冲
[解决办法]
if(cin.fail())
{
cerr < < "bad date ";
cin.clear(istream::failbit);
cin.sync(); //增加这个语句
continue;
}
[解决办法]
错误输入由于输入不匹配,
cin 出错,
输入的内容不被接收,
仍在缓冲中,
下一次循环的时候输入从缓冲读取,
还是出错。

所以需要 cin.sync(); 把缓冲内容清除 ...
[解决办法]
试贴
[解决办法]
跟楼主同样的问题。这段代码貌似就是C++ primer第四版上的一段例程。。。
[解决办法]
嗯,当初俺也是加了cin.sync才好的……

读书人网 >C++

热点推荐