C++条件状态 判别输入问题

IO标准库一系列的条件状态成员,用来标记给定的IO对象是否处于可用的状态,或者碰见的哪些特定的错误。换句话说,就是输入年龄时候,输入了一个英文字符,跟输入的一定关系都没有的时候,会出现错误。Cin>>m_age; C++会直接跳出,对此,条件状态就有用了。

 

fail()中检测的是badbit和failbit这两个标志位,而bad()中检测的是badbit标志位。
badbit表示的是一种系统级的错误,比如流缓冲区完整性的缺失等,是无法恢复的。
failbit表示读取数据时失败,比如已经读到最末尾了等,它是可恢复的。

#include "iostream"
using namespace std;

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

	if (is.fail())
	{
		cout << "cin fail()" << endl;
	}
	else
	{
		cout << "cin not fail" << endl;
	}
	/*****返回输入流结束位,即按下"ctrl" + "z"键********/
	if (is.eof())
	{
		cout << "cin eof()" << endl;
	}
	else
	{
		cout << "cin not eof()" << endl;
	}

	if (is.good())
	{
		cout << "cin good()" << endl;
	}
	else
	{
		cout << "cin not good()" << endl;
	}
}

int main()
{
	cout << "检查cin 的状态:" << endl;

	check_cin_state(cin);

	cout << "输入一个整数" << endl;

	int n;

	cin >> n;

	cout << "再检查一下cin的状态" << endl;

	check_cin_state(cin);
	
	return 0;
}


#include "iostream"
using namespace std;



int main()
{
	int sum = 0, value;

	while (cin >> value)
	{
		sum += value;
		cout << "sum is " << sum << endl;
	}
	
	return 0;
}
这里的输入数字是有效的,当输入字母的时候,就退出了程序。





#include "iostream"
using namespace std;



int main()
{
	int sum = 0, value;

	while (cin >> value,!cin.eof())
	{
		if (cin.bad())
		{
			throw std::runtime_error("IO stream corrupted");
		}
		if (cin.fail())
		{
			cerr << "bad data,try again" << endl;
			/*****恢复流的状态****/
			cin.clear();
			/*****换行符前面的200字符清除掉*********/
			cin.ignore(200, '\n');
			continue;
		}
		sum += value;
		cout << "sum is" << sum << endl;
		
	}
	
	return 0;
}




  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值