您的位置:首页 > 编程语言 > C语言/C++

C++的cin一些探讨

2016-07-28 13:33 176 查看
最近一段时间总是看到cin这个函数在搞怪,while里面或者if里面用cin作为判断语句用得比较多,但为什么可以做为判断,如果不搞清楚cin内部的机理,那么用起来就会晕晕乎乎。所以特意又去翻了翻书,在C++primer plus第五版的755页里得如下一些思路:
首先看cin>>m_1>>m_2;这样的代码到底是怎么输入的。
要搞清楚怎么输出,得先明白abc到底是什么类型的变量。
cin其实是按需分配的,上面有>>m_1>>m_2,说明要输入2次。
理论上每一次输入的结束都是以回车键为止,但在cin里面还会有特殊的情况,那么就是如果
int m_1;
cin>>m_1;你给输入-2b;那么m_1里面到底是啥?(先搞清楚这个问题,方便解决上面的cin>>m_1>>m_2;)
答案是m_1里面只有-2没有b。。。为什么会这样?
原因就是m_1被设定为了int类型,而b不属于这种类型,cin最后一个可接受的字符是2,把b留在了输入流中,下一个cin则从b开始读取。
所以,如果上面的m_1,m_2如下定义

int main()
{
    int m_1;
    char m_2;
    cout << "Enter m_1 and m_2" << endl;
    cin >> m_1 >> m_2;
    cout << "m_1:" << m_1 << endl << "m_2:" << m_2;
}

那么当按下-2b并按下回车键后结果如下

(因为m_1是int类型,那么就把-2传给了它,同时把b留下了而且下次的m_2就是从b开始读取,遇到了回车键那么代表输入结束)。
所以上面的结果是可以解析的,但有下面的结果我先却不能解析

int main()
{
    int m_1;
    int m_2,m_3;
    cout << "Enter m_1 and m_2 and m_3" << endl;
    cin >> m_1 >> m_2 >> m_3;
    cout << "m_1:" << m_1 << endl << "m_2:" << m_2 << endl << "m_3:" << m_3 << endl;
}

只有最后才正常。
为啥是-858993460,有谁来回答一下吗?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: