学习c++ ,对异常错误输入的处理

学习c++ ,对异常错误输入的处理

在使用c++ 标准输入std::cin 中,我们通常会按照正确的类型数据输入,但是,如果我们不按照正确的类型数据输入,结果如何呢?
现在我们使用下面的简单c++代码,来测试一下

这里写代码片
#include<iostream>
int mina(void)
{
     int number;
    //第一次输入
    std::cout<<"Please Enter a number\n";
    std::cin>>number;
    //第二次输入
    std::cout<<"Please Enter again \n";
    std::cin>>number;

    return 0;
}

这是在vim 中编辑的简单代码

这是在vim 中编辑的简单代码
运行程序后输出我们之前代码的中的提示“please enter a number ,等待输入

运行程序后输出我们之前代码的中的提示“please enter a number ,等
当我没有像提示那样输入数字,输入了一个字母

当我没有像提示那样输入数字,输入了一个字母

当在键入字母后,按”enter” 后出现的结果,不在接受其余的输入
当在键入字母后,按”enter" 后出现的结果,不在接受其余的输入

很明显我们发现了缺陷,那就是当我们输入错的数据的情况下,类似这样的程序会崩溃掉,那我们应该怎么做呢,当然创造c++标准库的这些牛人也考虑这个缺陷,他们设计出了刷新输入输出流的一些办法,类似在应对输入错误时 ,使用std::cin.clear();在应对标准输出是出现错误时使用std::cout<

这里写代码片
#include<iostream>
int main(void)
{
 int number;
 std::cout<<"Please enter a number"<<std::endl;
 std::cin>>number;
  if(!std::cin)
  {
     std::cin.clear();
     }
    std::cout<<"Please Enter Again"<<std::endl;
    std:: cin>>number;

   std::cout<<"just now ,your enter is "<<number<<std::endl;
  return 0;
  } 

我们使用上面的代码在vim上编辑
我们使用上面的代码在vim上编辑

和上面的操作一样我们根据提示输入错误数据
和上面的操作一样我们根据提示输入错误数据

在键入”enter“出现了这样的结果
在键入"enter“出现了这样的结果

似乎没按照我们预想的那样的进行,还是没法再进行其他输入。
为什么呢?
我们来推断一下,当我们通常正确输入时,当输入数据结束后,按”enter”,会有换行操作
但是,这里,在输入错误时,时没有的, 那有可能,在错误输入时 ,后面的操作的就被终止了。
当我们输如错误后,键入”enter” 就直接出现了上面的结果。我,猜测,会不会是“enter “在做怪。

然后我们来尝试改善代码

这里写代码片
#include<iostream>
int main(void)
{
 int number;
 std::cout<<"Please enter a number"<<std::endl;
 std::cin>>number;
  if(!std::cin)
  {
     std::cin.clear();
     std::cin.get();
     }
    std::cout<<"Please Enter Again"<<std::endl;
    std:: cin>>number;

   std::cout<<"just now ,your enter is "<<number<<std::endl;
  return 0;
  } 

我们来看看vim 编辑下运行的过程

vim 编辑下的代码
vim 编辑下的代码

运行,出现提示,等待输入
运行,出现提示,等待输入

输入错误数据并键入“enter”
输入错误数据并键入“enter”

可以再次进行输入了,我键入“12”
可以再次进行输入了,我键入“12”

结果是再次输入的结果也正常
结果是再次输入的结果也正常

从上面的猜测,我们发现,其实我们的猜测是对的。因为没有专门接收“enter”,所以,输入没有被刷新。

以上是用来实验的简单程序,仅仅简单用于验证。当然这些程序的验证只针对使用标准输入函数,当然如果通过自己编写的输入函数,肯定不适用。
通过简单的程序,我们发现了应对错误输入的有效方法。同时,我们可以根据以上的进行更深层次的改良。以便我们写出更优秀的程序

因为我们没有详细了解标准输入输出库函数内部,所以会经常出现类似的问题,但是当我们经常使用,便会发现其中的一些需要注意的地方。

初学c++ ,不足之处请指正,乐意接受您的建议

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值