io出错处理

#include <iostream>
using namespace std;

int main()
{
	cout << cin << endl;
	cout << "请输入一个整数:" ;
	int x;
	cin >> x;
	cout << "x = " << x << endl;
	//如果这里接收的是字符或字符串,那么cin就会出错。
	cout << cin << endl;
	if(!cin)
	{
		cout << "cin已经出现问题" << endl;	
		//如果没有下面两行代码,cin到下面就用不了,不能接收新的数据了。
		cin.clear();  //清楚错误状态
		cin.ignore(10000,'\n');   //清空缓冲区
	}
	cout << cin << endl;
	cout << "如果上一个x的值在正常输入情况下不为0,那么请忽视这些话。\n如果为0的话,请再次输入一个非0整数。\n(如果打印出来的x不为0,则说明cin已经修复好了)\n" << "好了,请继续输入输入一个整数吧。\n tips:当然,你也可以输入别的类型的数据试试看。" << endl;
	cin >> x;
	cout << "x = " << x << endl;
}

/*  不按规矩出牌,输入了一个字符a,然后程序就结束了。不会让你再输入第二个数字了(没有加入清除错误状态和清空缓冲区代码)
0x601290
请输入一个整数:x = 0
0
cin已经出现问题
0
如果上一个x的值在正常输入情况下不为0,那么请忽视这些话。
如果为0的话,请再次输入一个非0整数。
(如果打印出来的x不为0,则说明cin已经修复好了)
好了,请继续输入输入一个整数吧。
 tips:当然,你也可以输入别的类型的数据试试看。
x = 0

*/

/*  按着规矩出牌,你就会看到这样的结果。
 *  我是先输入一个1,然后再输入一个2
 *  这里加不加入清除错误状态和清空缓冲区的代码都没有影响。
0x601290
请输入一个整数:x = 1
0x601290
0x601290
如果上一个x的值在正常输入情况下不为0,那么请忽视这些话。
如果为0的话,请再次输入一个非0整数。
(如果打印出来的x不为0,则说明cin已经修复好了)
好了,请继续输入输入一个整数吧。
 tips:当然,你也可以输入别的类型的数据试试看。
x = 2
*/

/*  为了解决不按规矩出牌导致cin出问题,于是加入了清除错误状态和清空缓冲区的代码
 *  这样我在第一次输入了字符a后cin出错,然后cin的错误马上被后面的代码清除了,并且在清空了缓冲区后cin又回复活力了。
 *
0x6012b0
请输入一个整数:x = 0
0
cin已经出现问题
0x6012b0
如果上一个x的值在正常输入情况下不为0,那么请忽视这些话。
如果为0的话,请再次输入一个非0整数。
(如果打印出来的x不为0,则说明cin已经修复好了)
好了,请继续输入输入一个整数吧。
 tips:当然,你也可以输入别的类型的数据试试看。
x = 123

*/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值