使用cin.clear()之间的差异;

时间:2014-02-19 17:21:42

标签: c++ cin

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()有什么好处呢?

2 个答案:

答案 0 :(得分:1)

如果cin.good()返回true,那么您实际上是在设置清除时调用eofbit(取决于实现)。否则你将它设置为goodbit。

如果你没有用参数调用cin.clear,那么它将使用默认的goodbit。

答案 1 :(得分:1)

首先,我不确定std::cin.clear( std::cin.good() )是谁 甚至保证编译。 std::cin.good()返回boolstd::cin.clear()需要std::ios_base::iostate,而我不是 确保有保证转换。 (例如,std::ios_base::iostate可以是enum。)其次, 即使它编译,它也只是意外地做你想要的:因为你 如果std::cin.fail()truestd::cin.good(),则仅执行此代码 将返回false,对于所有整数类型,它将转换为0, 和std::ios_base::goodbit(这可能是你想要的)是 定义为0。它也是函数的默认参数,所以 指定它真的没有意义。 (clear 可以用于设置 比特,但它的方式非常残酷;通常,当你想要的时候 要设置错误,您将使用setstate,不会重置任何错误 现有错误。)

对于它的价值:我从来没有找到过这样的案例 适合致电std::basic_ios<>::good()