回 帖 发 新 帖 刷新版面

主题:关于C++中的io流的条件状态的疑问

C++ Primer中说道: 当failbit和badbit被置位时, 那么fail()返回true.  还有: 我们将流作为条件使用的代码就等价于!fail()
标准ISO中也这样说 http://www.cplusplus.com/reference/ios/ios/fail/


所以我的理解就是:  if(cin >> x) 就等价于 if(!(cin >> x).fail()) 

这样正确吗? 


但是我测试之后有点小问题:

我的代码如下:

#include <iostream>

using namespace std;

void check_cin_state(istream & is)
{
	if (cin.eof())
		cout << "cin eof()" << endl;
	else
		cout << "cin not eof()" << endl;
	if (cin.fail())
		cout << "cin fail()" << endl;
	else
		cout << "cin not fail()" << endl;
	if (cin.bad())
		cout << "cin bad()" << endl;
	else
		cout << "cin not bad()" << endl;
	if (cin.good())
		cout << "cin good()" << endl;
	else
		cout << "cin not good()" << endl;
	cout << endl;
}

int main()
{
	int x;
	if (cin >> x)
		check_cin_state(cin);
	check_cin_state(cin);	
	
	return 0;
}
当我在windows电脑上输入Ctrl + Z 的时候, 

输出如下:

cin eof()

cin fail()

cin not bad()

cin not good()


那么问题来了, 为什么当我eofbit被置位的时候, fail()也返回true? 







回复列表 (共1个回复)

沙发

因为碰到eof会置位(1)eofbit (2) failbit


很久没来了。作为一个十年的老会员,借你的楼补一个happy new year:)

我来回复

您尚未登录,请登录后再回复。点此登录或注册