cin读取数字时遇到字符的情况

cin读取数字时遇到字符
当定义一个int变量,用cin输入时,如果输入的是一个字符,会发生以下4中情况:
1.n的值变成0
2.不匹配的输入被留在输入流中
3.cin对象的一个错误标记被设置,即cin.fail()返回true
4.对cin的方法调用返回false,即(cin>>n)返回的是false
#include<bits/stdc++.h>
using namespace std;

int main()
{
    int n;
    cin>>n;

    //也可以用 if(cin>>n) cout<"yes\n";用这条语句的时候,前面就不需要cin>>n了
    if(cin.fail()==false) cout<<"yes\n"; //输入的是数字
    else cout<<"no\n";  //输入的不是数字
    
    return 0;
}
当发生这种情况时,cin对象的一个错误标记被设置。设置这个标记后,不再进行输入。若要后续还想再输入,可以使用cin.clear()清空标记。如下:
#include<bits/stdc++.h>
using namespace std;

int main()
{
    int n;
    
    if(cin>>n) cout<<"yes\n";
    else cout<<"no\n";

    cin.clear();  //清空标记
    cin.get();  //吸收上一次输入的最后的回车
    
    int b;
    cin>>b;
    cout<<b<<endl;
    
    return 0;
}
如果没有cin.get()吸收上一次输入的'\n'。则接下来输入b时,相当于把'\n'输入给b,相当于又把一个字符输入给一个int变量,会发生上面的4种情况。
注意当输入的是数字的时候,输入流中会自动忽略空格回车等控制字符。只有当输入的是字符时,才会保留'\n'在输入流中。
int a,b;
cin>>a;
cin>>b;
这种情况下,如果输入的都是数字,及时输入中有回车,但输入流中不会保留回车,即不会把'\n'输入给b,而是把第二个数输入给b。如果第一个输入的是字符,则'\n'会保留在输入流中,此时在执行cin>>b语句时,会把'\n'输给给b。。。。

自己多试试体会一下就明白了。。

  • 14
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值