C ++中的函数cin.clear()有什么详细描述?

时间:2014-10-28 15:39:25

标签: c++ stream cin

美好的一天,我的老师说我应该学习C ++中的函数cin.clear()。我一直在寻找,但从未找到过正常的解释。 This resource is cplusplus说这个功能

  

为流的内部错误状态标志设置新值。标志的当前值被覆盖:所有位都被状态中的位替换;如果state是goodbit(为零),则清除所有错误标志。

但我不太明白“状态”是什么,并且从那里有标志和错误,这就是为什么,以及我们如何以0值替换它们。什么是“旗帜”以及为什么需要它们。正如他所说,我应该知道哪些参数或数据采用了函数cin.clear()并返回,我明白它不会返回,但它也需要一些东西?请帮忙。对不起英语不好,我通过翻译写信。

1 个答案:

答案 0 :(得分:1)

函数std::basic_ios<>::clear()影响 std::ios_base::iostate位,大部分是 错误条件。该标准定义了四个&#34;四个&#34;位:

badbit
设置上次输入是否因某些硬件故障而失败, 例如磁盘上的读取错误。 (实际上,我不确定 所有实现检查这个;我怀疑有些人愿意 只是把它视为文件的结尾。)
failbit
设置上次输入是否由于某种原因而失败 这将设置badbit。最普遍的 原因是格式错误(尝试读取`int`时 输入中的下一个字符是`&#34; abc&#34;`)并且遇到了结尾 文件_before_已经能够读取足够的数据 请求输入。
eofbit
这不是一个错误条件;它将随时设置 stream看到文件的结尾。这可能是因为它还需要 另一个字符是为了解析输入,在这种情况下是 failbit也将被设定;但它也可能是 因为输入流在预测时看到了文件的结尾。 (对于最后一种情况,考虑输入int,其中 流中的剩余字符为&#34; 123&#34;,没有尾随 空白,甚至不是新行。为了知道它有 处理完所有相关字符后,流必须尝试 在3之后读取一个字符。在这种情况下,它设置 eofbit,要记住它已经结束了 文件,但确实_not_设置failbit,因为&#34; 123&#34; 是int的有效complet输入。)
goodbit
这甚至不是一个模式,而只是一个特殊的值 没有设置前面的位。

在大多数情况下,failbiteofbit仅与之相关 输入;如果是磁盘,您将获得(或应该获得)badbit输出 已满。