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,有谁来回答一下吗?
首先看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,有谁来回答一下吗?
相关文章推荐
- c++计算器后续(3)
- C语言中,为什么字符串可以赋值给字符指针变量
- 1. Two Sum(c++实现)
- codeblocks编译出错问题的解答!(编译c++ 或者c程序)
- 在C语言中,double、long、unsigned、int、char类型数据所占字节数
- c++set常用用法
- c++内存对齐
- 求一元二次方程的根
- 黑马程序员:C++学科推出全新三大实战项目
- Cpp环境【POJ3622】【Vijos2990】【Usaco2007】挑剔的美食家
- 【OpenJudge】c语言_计算2的幂
- 【OpenJudge】c语言_A*B问题
- 【OpenJudge】c语言_计算三角形面积
- C语言词法分析:C#源码
- 黑马程序员:C/C++薪资再创纪录,平均薪资11054元!
- c++ 析构函数为什么要加virtual
- 【c语言_取值范围】int long longlong
- C++文件处理
- C++构造函数、拷贝构造函数
- C语言学习之——排序