【C++】cin输入类型错误导致的bug


C++中的cin函数在输入类型错误时会导致意外的bug

例子:比如我们新建一个整型变量,使用了cin函数接收输入,如果输入的不是整型数据会导致程序错误

例如:

int num;
string name;
cout<<"请输入一个整数:";
cin>>num;
cout<<"请输入姓名:";
cin>>string;
cout<<"输入完成"<<endl;

第一次要求输入整数,而我们假如输入一个汉字或者一个字符的时候,会产生一个bug,导致程序跳过下面的所有cin.直接运行到程序尾部


原因分析:

cin函数数据类型限制不严谨

由于cin函数本身没有设置输入限制,所以在我们进行输入类型与我们新建变量的类型不一直的时候,导致cin的一个fail函数至于错误状态,并直接进入下一行代码,并忽略所有接下来cin函数直到程序结束


解决方案:

我们在输入的时候,自己加上输入类型判断,错误的话重新输入,这里要利用到两个函数
cin.clear()是用来更改cin的状态标示符的。
cin.ignore();//忽略掉缓冲区的内容,直到遇到EOF为止

int num;
string name;
cout<<"请输入一个整数:";
cin>>num;
while(cin.fail())
{
    cin.clear();//清除cin的错误信息
    cin.ignore();//忽略掉缓冲区的内容,置于EOF位置
    cout<<"请输入正确的数字(整型):";
    cin.ignore();//EOF位置,接收下一个cin函数
    cin>>num;
}
cout<<"请输入姓名:";
cin>>string;
cout<<"输入完成"<<endl;

这里用两个cin.ignore(),在测试的时候使用了一个cin.ignore()的时候会导致第一次循环依旧忽略cin函数,直到第二次才会访问,因此要用两次来解决这个问题

  • 12
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值