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

来源:互联网 发布:安倍为什么能连任 知乎 编辑:程序博客网 时间:2024/06/05 19:17

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。。。。

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

阅读全文
0 0