while(cin.fail()){
cout<<"Error: Your line is too long.\nPlease enter a shorter line: ";
cin.clear(cin.good());
cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
cin.getline(name, maxCh);
}
我正在使用cin.clear(cin.good());
来清除错误标记
但使用cin.clear();
也有效吗?如果我正在调用此函数,那么cin.good()
有什么好处呢?
答案 0 :(得分:1)
如果cin.good()返回true,那么您实际上是在设置清除时调用eofbit(取决于实现)。否则你将它设置为goodbit。
如果你没有用参数调用cin.clear,那么它将使用默认的goodbit。
答案 1 :(得分:1)
首先,我不确定std::cin.clear( std::cin.good() )
是谁
甚至保证编译。 std::cin.good()
返回bool
,
std::cin.clear()
需要std::ios_base::iostate
,而我不是
确保有保证转换。
(例如,std::ios_base::iostate
可以是enum
。)其次,
即使它编译,它也只是意外地做你想要的:因为你
如果std::cin.fail()
为true
,std::cin.good()
,则仅执行此代码
将返回false
,对于所有整数类型,它将转换为0
,
和std::ios_base::goodbit
(这可能是你想要的)是
定义为0
。它也是函数的默认参数,所以
指定它真的没有意义。 (clear
可以用于设置
比特,但它的方式非常残酷;通常,当你想要的时候
要设置错误,您将使用setstate
,不会重置任何错误
现有错误。)
对于它的价值:我从来没有找到过这样的案例
适合致电std::basic_ios<>::good()
。