#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
*/
io出错处理
最新推荐文章于 2022-05-15 10:09:31 发布