c++中cin的 badbit failbit

badbit, to record a loss of integrity of the stream buffer.
eofbit, to record end-of-file while extracting from a stream.
failbit, to record a failure to extract a valid field from a stream.
In addition, a useful value is goodbit, where no bits are set.

接下来我么看几个ios类的数据定义(引用msdn):
typedef T2 iostate;
static const iostate badbit, eofbit, failbit, goodbit;

这里ios类定义了这四个常量badbit, eofbit, failbit, goodbit,其实这四个标志常量就是取对应标志位的掩码,也即输入的四种异常情况!
以上四个常量对应的取值为:
ios::badbit 001 输入(输出)流出现致命错误,不可挽回
ios::eofbit 010 已经到达文件尾
ios::failbit 100 输入(输出)流出现非致命错误,可挽回
ios::goodbit 000 流状态完全正常, 各异常标志位都为0

1.什么情况是badbit 输入(输出)流出现致命错误,不可挽回
2.什么情况是failbit 100 输入(输出)流出现非致命错误,可挽回
3.不可挽回后导致的输入流结果是什么4. 可挽回导致输入流的结果是什么

具体的错误情况跟系统对c++标准库的实现有关。
就一般说来,badbit是一些系统底层或者硬件出错,比如文件系统错误,磁盘错误,网络错误等等。failbit就是其他软件错误,如试图从不能解析为整数的字符串里想要读一个整数等,顺便说下eof也会造成failbit被置位。
出错之后(不管是可挽回还是不可挽回)的结果是,之后的io操作统统不执行,因为这些操作都会有个if语句先判断这些错误位,如果被置位就直接返回了。
出错后可以用clear方法清除这些错误位,然后继续io。如果错误没有排除,那么结果就是相应的位又被置位了。

就是这样,没什么特别复杂的。 其实你最开头的msdn说明已经很清楚了,流缓冲完整性被破坏就会出现badbit,提取数据域失败就是failbit。
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-03-21

    badbit是一些系统底层或者硬件出错,比如文件系统错误,磁盘错误,网络错误等

    failbit就是其他软件错误,如试图从不能解析为整数的字符串里想要读一个整数等,顺便说下eof也会造成failbit被置位。

    出错之后(不管是可挽回还是不可挽回)的结果是,之后的io操作统统不执行,因为这些操作都会有个if语句先判断这些错误位,如果被置位就直接返回了。

    出错后可以用clear方法清除这些错误位,然后继续io。如果错误没有排除,那么结果就是相应的位又被置位了。

本回答被网友采纳

C++中ctrl+Z问题
while(cin>>temp)失败的条件是!cin,即cin.badbit、cin.failbit、cin.eofbit三者中有任意一者或以上被设置。Ctrl+Z会向控制台中输入一个EOF字符,cin读到该字符eofbit就会被设置,导致cin失败,结束循环。

【C++】cin的那些事
输入是程序获取数据的关键,而C++中的cin对象则将标准输入表示为字节流,通常通过键盘提供。cin会根据变量的类型,自动使用其方法将输入的字符序列转换为所需的类型,例如,它能识别基本类型如char、short、int等。cin通过重载的格式化输入函数(如>>)来处理输入,能够将输入数据转换为目标指定的格式。这些...

C++系统函数中cin.fail()该如何应用?
failbit表示读取数据时失败,比如已经读到最末尾了等,它是可恢复的。例如:include <iostream.h> cout <<"请重新输入:" ;cin.clear(); \/\/修复输入流 cin.ignore(); \/\/取走刚才流中的字符 cin在对整数进行输入的时候,如果输入小数,会把小数的小数点,当做输入整数的结束符。所以不会有问题。...

C++ cin的使用,看这一篇就够了
cin在C++中用于输入,被视为字符流。istream类提供了一个将istream对象(如cin)转换为bool值的函数。当cin出现在需要bool类型的地方(如while循环的测试条件中)时,该转换函数将被调用。读取成功时转换为true,读取失败时转换为false。2.1 cin的自动类型转换 istream类重载了>>抽取操作符,为以下数据...

c++里面cin的问题
错误标志, 用来检查cin的状态.比如说 int val;cin >> val; \/\/ 假设你输了一个字母进去, 那么failbit就会被设立.if(cin.fail()) \/\/ 检查cin的状态 cout << "输入失败" << endl;

badbit 在c++里是什么意思啊
badbit是C++中检测输入\/输出的状态标志之一.具本如下:C++中负责的输入\/输出的系统包括了关于每一个输入\/输出操作的结果的记录信息。这些当前的状态信息被包含在io_state类型的对象中。io_state是一个枚举类型(就像open_mode一样),以下便是它包含的值:godbit 无错误 Eofbit 已到达文件尾 failbit 非...

C++中将输入条件作为循环判断条件的问题
failbit---I\/O操作失败,清除状态字后,可以对流继续进行操作。badbit---试图进行非法操作,清除状态字后,流可能还可以使用。hardfail---致命错误,不可恢复的错误。对应于这些位,可用ios中定义的如下函数来检查流的当前状态位:int good()---如果正常,返回非0值 int bad()---如果badbit被设置,返...

cin的四个标记位问题
它们只需要使用4位,但不表示实际上只占用了这么少的内存单元。eof() 是检查eofbit 是否已被设置,返回 真 或 假。真 表示 遇到 EOF.fail() 是检查 badbit 和 failbit 2个标志, 2个都未设 为假,2个都设或其中之一设了 就为真。设了的是坏,失败.

c++里面cin.clear()的意思
cin.clear(标识符);标识符号为:goodbit 无错误 Eofbit 已到达文件尾 failbit 非致命的输入\/输出错误,可挽回 badbit 致命的输入\/输出错误,无法挽回 若在输入输出类里.需要加ios::标识符号 通过cin.clear,我们能确认它的内部标识符,如果输入错误则能重新输入.结合真正的清空数据流方法cin.sync(),请看...

请教:c++中读文件,如何判断文件结尾
a、在C++中有三个位用来设置错误的状态信息,iso::eofbit当文件到达末尾时则设置该位。ios::badbit当流被破坏时设置该位,这是不可恢复的,比如文件读取错误。ios::failbit如果输入操作未能读取到预期的字符或输出操作没有写入预期的字符则设置该位,这是可恢复的。这三个状态标志设置了不同类型的输入...

相似回答