std::ios::clear 的参数不能组合么?
本帖最后由 shendaowu 于 2013-08-14 13:46:19 编辑
#include <iostream>后面的那几个输出全都是零。
#include <cstdio>
using namespace std;
int main()
{
cin.clear( ios_base::goodbit );
printf( "%X\n", cin.rdstate() );
cin.clear( ios_base::eofbit );
printf( "%X\n", cin.rdstate() );
cin.clear( ios_base::failbit );
printf( "%X\n", cin.rdstate() );
cin.clear( ios_base::badbit );
printf( "%X\n", cin.rdstate() );
cout << endl;
cin.clear( ios_base::eofbit & ios_base::failbit );
printf( "%X\n", cin.rdstate() );
cin.clear( ios_base::eofbit & ios_base::badbit );
printf( "%X\n", cin.rdstate() );
cin.clear( ios_base::failbit & ios_base::badbit );
printf( "%X\n", cin.rdstate() );
return 0;
}
还有怎么理解这个函数名?这个函数的功能明显不是设置么?怎么用clear这个这么容易引起歧义的名字?虽然默认情况下clear()确实是清空错误的意思,但是其他的情况就没有人用么?
[解决办法]
cin.clear( ios_base::eofbit & ios_base::failbit );
---------------------------------------------
状态位的结合操作不是用 & 而是用
[解决办法]
clear 默认是清除3个状态位。如果有参数,就置这几个参数1,其他参数清零
相对应有个setstate()函数,只设置相关的标记为1,其余的不变。
大概就是取名clear的缘故。
大多数就用默认的clear,其他的方式很少用。