首页 新闻 会员 周边 捐助

C++问题:if( input.rdstate() & std::ios::failbit )

0
悬赏园豆:10 [已解决问题] 解决于 2012-04-21 20:16

问题大致如下(这是):

std::ifstream input;

input.open( filename.c_str(), std::ifstream::in );

if( input.rdstate() & std::ios::failbit )

  ~~;

请问:if里面怎么理解?

C++
问题补充:

NLP新手的主页 NLP新手 | 菜鸟二级 | 园豆:204
提问于:2012-04-21 17:48
< >
分享
最佳答案
0

1:iostate rdstate ( ) const; 返回的是iostate,简单的说也就是一个int数值.用2进制数据的某一个位置设置为1表示一种状态

2:failbit 的定义如下,二进制数据的第二位为1的时候说明是该数据。

static const _Iostate goodbit = (_Iostate)0x0;
static const _Iostate eofbit = (_Iostate)0x1;
static const _Iostate failbit = (_Iostate)0x2;
static const _Iostate badbit = (_Iostate)0x4;
static const _Iostate _Hardfail = (_Iostate)0x10;

3:input.rdstate() & std::ios::failbit  通过位运算的与来判断当前的状态是否是failbit。

收获园豆:6
zsounder | 老鸟四级 |园豆:2819 | 2012-04-21 18:31

谢谢解答

NLP新手 | 园豆:204 (菜鸟二级) | 2012-04-21 20:14

这个if语句就等价于if( input.rdstate()==std::ios::failbit )了

NLP新手 | 园豆:204 (菜鸟二级) | 2012-04-21 20:37

@kevinGao: 不能说是等价与if( input.rdstate()==std::ios::failbit ),

if( (input.rdstate() & std::ios::failbit)==std::ios::failbit),因为input.rdstate()中有多个状态,而std::ios::failbit 只是一个状态而已。

zsounder | 园豆:2819 (老鸟四级) | 2012-04-21 21:00

@Wang Hui: 哦,是这样。不过faibit=“0010”,那么如果(状态a & faibit)!=0 ,即状态a为“**1*”这个样子的,那么a就只有failbit和_hardfail两种可能吧,

NLP新手 | 园豆:204 (菜鸟二级) | 2012-04-21 22:02
其他回答(1)
0

读取cin的状态

收获园豆:4
中州大道 | 园豆:129 (初学一级) | 2012-04-21 18:02

你好,这个条件是怎么判断的呢

支持(0) 反对(0) NLP新手 | 园豆:204 (菜鸟二级) | 2012-04-21 18:03

尤其是中间那个‘&’的作用是什么

支持(0) 反对(0) NLP新手 | 园豆:204 (菜鸟二级) | 2012-04-21 18:05

@kevinGao: 我的理解是用rdstate()读取后面failbit的状态字

支持(0) 反对(0) 中州大道 | 园豆:129 (初学一级) | 2012-04-21 18:24

@中州大道: 谢谢,楼下说的有理

支持(0) 反对(0) NLP新手 | 园豆:204 (菜鸟二级) | 2012-04-21 20:15
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册