iostream clear() [英] iostream clear()
问题描述
istream &func(istream &in)
{
string data;
while (in >> data, !in.eof()) {
if (in.bad())
throw runtime_error("IO stream corrupted");
if (in.fail()) {
cerr << "bad data, try again" << endl;
in.clear();
in.ignore(200);
continue;
}
cout << data << endl;;
}
//in.clear(istream::eofbit | istream::failbit);
in.clear();
return in;
}
为什么in.clear(istream::eofbit | istream::failbit);
无法重置cin?
why in.clear(istream::eofbit | istream::failbit);
can not reset the cin?
但是in.clear
可以做到.
PS:我在main()中使用此函数,并使用cin
作为其参数.
PS: I use this function in main(), and use cin
as its parameter.
推荐答案
clear的定义如下:
clear is defined like this:
void clear(iostate state = goodbit);
void clear(iostate state = goodbit);
因此,in.clear();
实际上正在执行此操作:in.clear(istream::goodbit);
这将重置流.调用in.clear(istream::eofbit | istream::failbit);
会同时设置eofbit
和failbit
,我怀疑这就是您想要的.
So, effectively, in.clear();
is doing this: in.clear(istream::goodbit);
which resets the stream. Calling in.clear(istream::eofbit | istream::failbit);
would set both the eofbit
and failbit
, I doubt that is what you want.
std::cin.clear(std::istream::eofbit | std::istream::failbit);
std::ios_base::iostate state = std::cin.rdstate();
if( state == (std::istream::eofbit | std::istream::failbit))
{
std::cout << "eofbit and failbit set" << std::endl;
}
这篇关于iostream clear()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!