C++关于用户输入情况的判定与报错

       近期做C++实验大家可能都遇到对C++输入非规定类型数据的情况,例如定义一个int型变量,如果承载非int型数据必然会造成程序的崩溃,对于代码的健壮性有极坏的影响。因此我在此提供一个简单易用的方法。

  先说一下最常用的方法,这也是我四个月以前经常使用的一种方法,虽然笨拙,但是对编程者的思维有很大的考验。简而言之就是定义字符指针(char *或者string),把输入的所有数据全部承载,然后通过数组逐个判断,检测非规定类型变量,该报错的报错,该提示的提示,最后将字符数组转换为需要的数据intdouble之类之类的。极为麻烦…………

 

 

重头戏:简单易用的方法!先贴代码:


int temp;
char t;
cin>>temp;
t=cin.get();
         while((cin.fail())||(t!=10))
         {
              cout<<"输入错误,重新输入!"<<endl;
              cin.clear();
              cin.sync();
              cin>>temp;
              t=cin.get();
     }


 

  可以看到,只需要12行代码就能完成判定的复杂工作,下面我将详细解释:

  这是通过iostream里的函数完成的工作,大家写了一年程序可能都会发现辛辛苦苦写了200多行代码突然发现c++系统函数有这个功能,没错,这个功能就可以算是系统提供的……

       首先要解释c++输入的原理,通过cin输入字符时,所有输入的数据都会暂存在缓冲区里,然后根据流处理运算符>>之后的类型进行读取,如果输入不符合规定,cin自己会产生一个错误状态,就是cin.fail();这也就是判定的重点。然后向大家解释一下cin.clear();和cin.sync();这两个函数经常被大家忽视与混淆。前面讲到,cin在输入的时候会产生一个错误状态;cin.clear();就是用来清除这个错误状态的,如果不清除错误状态,会一直在死循环里循环循环…………,而cin.sync()是用来清除缓冲区里剩余信息的。

  现在看上面的程序,就清楚读了把,向temp输入数据(cin>>temp;);然后判定cin的状态,如果cin.fail();那么输出一个"输入错误,重新输入!"的提示信息;然后清除cin错误状态(cin.clear();),在清除cin缓冲区数据(cin.sync();),之后重新输入temp,再循环判定,知道cin正确为止……

  个人认为C++博大精神,如果你认为一个小功能写的很麻烦,90%是算法没有选对或者有系统函数支撑。欢迎互相探讨。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值