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