C++IO关于cin>>和getline的理解
2016-10-04 16:41
260 查看
这个问题困扰了我有一段时间了,趁着十一放假有时间,仔细研究了一下
首先来看一下输入输出运算符cin>>的构成:cin和>>
cin>>是由两部分构成的,cin和>>,其中cin是输入流istream类的一个对象,隶属于iostream函数库
而>>则是运算符:这个运算符的作用是:从左侧cin对象中读取数据,并将它赋给右侧的运算对象
大体的大概说完了,接下来就是干货了!!
....................................................
cin>>这个表达式应该分为两部分来看:cin 和>>
其中cin仅仅是一个istream对象!!!它的值反映的是当前输入流的状态:即cin对象接下来能否进行输入操作(能否从cin对象中读取数据)
cin对象实际上面向两方面的功能:
1.外部设备与cin之间:这部分对于程序员来说是透明的
设备(键盘)对它的修改,即通过设备直接修改cin对象,通过这个可以直接修改cin对象的状态(能否从cin对象中读取数据)
2.cin和内存(各种对象,变量)之间:
将cin中的数据读取出来,并赋予各种对象,变量
而这两方面的功能都不由cin对象完成,cin对象实际上只是一个状态数据量,1功能有外设(键盘)完成,2功能由<<和getline等等运算符完成
................................................
有了上面的对cin对象全方面的了解,接下来对>>运算符的分析就手到擒来了
>>运算符的作用实际上就是从cin对象中读取数据,并将数据赋予给右侧的各种对象或者变量,也就是上述的第2部分的功能了
那么>>运算符有哪些特性呢?毕竟输入输出总得控制开始和结束吧
1.>>运算符是由右侧的数据类型定义的,右侧的数据类型不同,重载的>>也不同
2.>>运算符是向左结合的
3.>>运算符从cin对象中读取数据时:如果遇到空格或者换行符号,那么这次读取数据结束,将空格之前的数据赋给右侧的运算对象,相应的,读取的第一个符号,也是空格或者换行符之后的第一个有效数据
4.一个>>运算符一次只能读取一次(一个)数据,要想读取多个数据,只能再加>>运算符
......................................................................
好吧,以上4个,就是>>的性质了,那么有些人又要问了,那么Ctrl+Z(~Z)文件结束符号又是怎么一回事呢?
其实这个文件结束符和>>完全就是风马牛不相干,有些人总是将Ctrl+z和>>联系在一起
文件结束符号:就是cin对象功能一中的一个性质!也就是说,你可以把文件结束符看成是外设的功能:
一旦从外设中遇到文件结束符(或者是无效的输入),cin对象的状态就会变为假!!,也就是说外设多不能向cin对象写值了!!!
自然<<运算符号就无效了
.......................................................
主体的知识已经讲完了,说穿了,就是要理解,cin对象其实是面向两方面的功能,要分清楚这两方面的功能对应的各种情况
...........
接下来是一点补充
又有人又会问,那么getline又是什么鬼呢?
其实geline没什么神秘的,它只不过是一种特殊的cin罢了
特殊体现在:
1.它是String对象定义的,只能string对象用(当然<<也是String对象重载的)
2.getline遇到空格不结束!!!也就是说它可以从cin对象中读取空格!!当然,遇到换行仍然结束,但是他也会读取换行符,但是读取换行符之后后停止读取,然后将读取的数据(此时包括换行符)赋给右侧的运算对象(x,见下),赋值的时候,丢弃换行符!!!,也就是说换行符不存到x中
getline的返回值是流参数和cin>>表达式一样,返回cin>>
3.getline是一个函数的形式:
调用如下:
string x;
getline(cin ,x);返回值为cin的状态
首先来看一下输入输出运算符cin>>的构成:cin和>>
cin>>是由两部分构成的,cin和>>,其中cin是输入流istream类的一个对象,隶属于iostream函数库
而>>则是运算符:这个运算符的作用是:从左侧cin对象中读取数据,并将它赋给右侧的运算对象
大体的大概说完了,接下来就是干货了!!
....................................................
cin>>这个表达式应该分为两部分来看:cin 和>>
其中cin仅仅是一个istream对象!!!它的值反映的是当前输入流的状态:即cin对象接下来能否进行输入操作(能否从cin对象中读取数据)
cin对象实际上面向两方面的功能:
1.外部设备与cin之间:这部分对于程序员来说是透明的
设备(键盘)对它的修改,即通过设备直接修改cin对象,通过这个可以直接修改cin对象的状态(能否从cin对象中读取数据)
2.cin和内存(各种对象,变量)之间:
将cin中的数据读取出来,并赋予各种对象,变量
而这两方面的功能都不由cin对象完成,cin对象实际上只是一个状态数据量,1功能有外设(键盘)完成,2功能由<<和getline等等运算符完成
................................................
有了上面的对cin对象全方面的了解,接下来对>>运算符的分析就手到擒来了
>>运算符的作用实际上就是从cin对象中读取数据,并将数据赋予给右侧的各种对象或者变量,也就是上述的第2部分的功能了
那么>>运算符有哪些特性呢?毕竟输入输出总得控制开始和结束吧
1.>>运算符是由右侧的数据类型定义的,右侧的数据类型不同,重载的>>也不同
2.>>运算符是向左结合的
3.>>运算符从cin对象中读取数据时:如果遇到空格或者换行符号,那么这次读取数据结束,将空格之前的数据赋给右侧的运算对象,相应的,读取的第一个符号,也是空格或者换行符之后的第一个有效数据
4.一个>>运算符一次只能读取一次(一个)数据,要想读取多个数据,只能再加>>运算符
......................................................................
好吧,以上4个,就是>>的性质了,那么有些人又要问了,那么Ctrl+Z(~Z)文件结束符号又是怎么一回事呢?
其实这个文件结束符和>>完全就是风马牛不相干,有些人总是将Ctrl+z和>>联系在一起
文件结束符号:就是cin对象功能一中的一个性质!也就是说,你可以把文件结束符看成是外设的功能:
一旦从外设中遇到文件结束符(或者是无效的输入),cin对象的状态就会变为假!!,也就是说外设多不能向cin对象写值了!!!
自然<<运算符号就无效了
.......................................................
主体的知识已经讲完了,说穿了,就是要理解,cin对象其实是面向两方面的功能,要分清楚这两方面的功能对应的各种情况
...........
接下来是一点补充
又有人又会问,那么getline又是什么鬼呢?
其实geline没什么神秘的,它只不过是一种特殊的cin罢了
特殊体现在:
1.它是String对象定义的,只能string对象用(当然<<也是String对象重载的)
2.getline遇到空格不结束!!!也就是说它可以从cin对象中读取空格!!当然,遇到换行仍然结束,但是他也会读取换行符,但是读取换行符之后后停止读取,然后将读取的数据(此时包括换行符)赋给右侧的运算对象(x,见下),赋值的时候,丢弃换行符!!!,也就是说换行符不存到x中
getline的返回值是流参数和cin>>表达式一样,返回cin>>
3.getline是一个函数的形式:
调用如下:
string x;
getline(cin ,x);返回值为cin的状态
相关文章推荐
- C++中关于cin、cin.get()、cin.getline()、getline()、gets()等函数的用法
- 关于C++中的cin的一点理解
- 关于c++问题while(cin>>x)怎么用eof结束
- C++中关于输入cin、gets、getline等的一些整理
- C++:关于while(cin>>str)无法结束的问题
- 关于C++ 学习的几点 理解 之 c++关键字详解(volatile,mutable,explicit,dynamic_cast<T>(expression))等
- C++中cout <<与cin >>的理解
- C++中关于cin、cin.get()、cin.getline()、getline()、gets()等函数的用法
- 关于c++问题while(cin>>x)怎么用eof结束
- 关于c++中getline(cin,str)在cin之后使用
- C++获取一行字符串getline(cin,s),不能用cin>>s
- C++中cin>>、cin.get()、cin.getline()、getline()、gets()输入函数详解
- c++ 输入cin>> get() getline()
- 关于C++ 从命令行输入数据 常用输方法cin的一些理解总结
- C++ premer Plus 第6版第6章第5题 &&cin>>初步理解
- c++中关于字符串的读入——cin、getline、get、gtes(查询+思考+总结)
- 关于C++中string输入cin,getline()问题,《C++ primer》学习总结
- c++中 gets(s)、scanf(%s) 、getline(s)、cin >> s 比较
- C++:关于while(cin>>str)无法结束的问题
- 【C++】while(cin>>str); 和 getline(cin,line,'#');