C++ 函数cin.clear()在C++;详细描述?

C++ 函数cin.clear()在C++;详细描述?,c++,stream,cin,C++,Stream,Cin,您好,老师说我应该学习C++中函数cin.clear()的用法。我一直在寻找,但没有找到正常的解释。说这个功能 为流的内部错误状态标志设置新值。标志的当前值被覆盖:所有位被处于状态的位替换;如果状态为goodbit(零),则清除所有错误标志 但我不太明白“状态”是什么,从那里有标志和错误,这就是为什么,以及我们如何将它们替换为0值。什么是“旗帜”以及为什么需要它们。正如他所说的,我应该知道哪些参数或数据接受函数cin.clear()并返回,我知道它不返回,但也接受了一些东西?请帮忙。对不起,我的

您好,老师说我应该学习C++中函数cin.clear()的用法。我一直在寻找,但没有找到正常的解释。说这个功能

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


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

函数
std::basic\u ios::clear()
会影响
std::ios\u base::iostate
位,在大多数情况下, 错误条件。该标准定义了“四”位:

badbit
如果上次输入因某些硬件故障而失败,则设置, e、 g.磁盘上的读取错误。(实际上,我不确定 所有的实现都会检查这一点;我怀疑有些会 只需将此视为文件结尾。)
failbit
如果最后一次输入因其他原因失败,则设置 哪个会设置
badbit
。最常见的 原因是格式错误(当 输入中的下一个字符是“abc”和遇到字符结尾 文件u之前u已经能够为 请求的输入。
eofbit
这不是一种错误情况;它将在任何时候设置 流看到文件的结尾。这可能是因为它还需要 另一个字符来解析输入,在这种情况下
failbit
也将被设置;但也可能是这样 因为输入流在向前看时看到了文件的结尾。 (对于最后一种情况,考虑输入<代码> int <代码>,其中 流中剩余的字符是“123”,没有尾随字符 空白,甚至不是新行。为了知道它有 处理所有相关字符后,流必须尝试 读取3后面的字符。在这种情况下,它将
eofbit
,记住它已经看到了 文件,但它不设置故障位,因为“123” 是
int
的有效完整输入)
goodbit
这甚至不是一个位模式,只是一个特殊的值 没有设置任何前面的位。 在大多数情况下,
failbit
eofbit
仅与 输入;如果磁盘
已经满了

您可能想阅读来自的文档,但大多数情况下,cppreference.com比cplusplus.com更值得信赖(两者都不是官方的)。“我不太明白“状态”是什么-您是否遵循了从该页面到
iostate
的参考?对于那些在意识形态上反对cplusplus.com的人,还有另一个参考。
clear()
只是删除所有标志并设置参数指定的标志。默认情况下,该参数是
goodbit
,因此默认情况下它只清除所有标志。