2014-10-28 103 views
-1

美好的一天,我的老师说我应该学习C++中的函数cin.clear()。我一直在寻找,但从来没有找到正常的解释。 This resource is cplusplus表示此功能C++详细描述中的函数cin.clear()是什么?

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

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

+2

您可能需要阅读http://en.cppreference.com/w/cpp/io/basic_ios/clear的文档,而大多数时候cppreference.com比cplusplus.com更值得信赖(两者都不是官方的)。 – 2014-10-28 15:51:53

+0

“我不太明白”状态“是什么”“ - 你是否按照该页面的[链接](http://www.cplusplus.com/reference/ios/ios_base/iostate/)参考了”iostate '?对于那些在思想上反对cplusplus.com的人来说,还有另一个参考文献[这里](http://en.cppreference.com/w/cpp/io/ios_base/iostate)。 – 2014-10-28 15:53:54

+0

clear()只是删除所有标志并设置参数指定的标志。默认情况下,该参数是'goodbit',所以它默认清除所有标志。 – 0x499602D2 2014-10-30 01:20:50

回答

1

功能std::basic_ios<>::clear()影响 std::ios_base::iostate位,这是,在大多数情况下, 错误条件。该标准定义了“四个一”位:

badbit
设定:如果最后输入失败,因为某些硬件故障,例如 磁盘上发生读取错误。 (在实践中,我不知道该 所有实现检查此,我怀疑有些人会 只是把它当作如果有文件的末尾。)
failbit
设定:如果最后输入除了 之外,由于某种原因而失败,这将设置 badbit。最常见的 原因是一个格式错误(当输入中的下一个字符为“abc”`时试图读取一个'int')并遇到文件_before_的末尾,该文件已经能够为 请求的输入读取足够的数据。
eofbit
这是_not_错误条件;只要 数据流看到文件结尾,它就会被设置。这可能是因为它还需要另一个字符来解析输入,在这种情况下, failbit也将被设置;但它也可能是 ,因为输入流在预读中看到了文件的结尾。 (对于最后一种情况,请考虑输入一个 int,其中 流中剩余的字符为“123”,而且没有尾随 空格,甚至没有新行。字符,流必须尝试到 后面读取一个字符3.在这种情况下,它设置为 eofbit,要记住它已经看到 文件的结尾,但它确实没有设置 failbit,因为“123” 是一个有效的完成输入为 int。)
goodbit
这甚至不是一个位模式,但在 其中没有前述的比特被设置简单的特殊值。

在大多数情况下,failbiteofbit仅在 输入有关;如果磁盘 已满,您将得到(或应该得到)badbit的输出。