这个问题困扰了我有一段时间了,趁着十一放假有时间,仔细研究了一下

首先来看一下输入输出运算符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++IO关于cin>>和getline的理解的更多相关文章

  1. C++语言中cin cin.getline cin.get getline gets getchar 的用法实例

    #include <iostream> #include <string> using namespace std; //关于cin cin.getline cin.get g ...

  2. cin 和 getline 混用中需要注意的问题

    这段时间在刷题过程中遇到一个cin和getline混合使用中的问题,解决之后记录如下: 先来看一段代码 #include <iostream> #include <string> ...

  3. 洛谷P1765 手机_NOI导刊2010普及(10) 关于cin和getline的一些区别 以及一些STL

    一. cin>>s:cin>>是由两部分构成的,cin和>>,其中cin是输入流istream类的一个对象,隶属于iostream函数库而>>则是运算符 ...

  4. 在c++中,标准输入string时cin 与getline两个函数之间的区别

    cin: cin函数是标准库的输入函数,在读取string时遵循以下规则: 1)读取并忽略开头所有的空白符(包括空格.换行符.制表符). 2)读取字符直到遇到空白符,读取终止. 例如: 当输入的是“  ...

  5. cin cout getline string

    1.C++ code, When we want to read a number whatever the type is int or double , just use cin >> ...

  6. io流中的装饰模式对理解io流的重要性

    为了说明 io流中的装饰者模式对理解io流的重要性,我想先简要介绍以下io的装饰模式. 装饰(decorator)你也可以翻译成修饰.比如:一个会精通化学数学的物理学家.在这个"物理学家&q ...

  7. 20140923 cin.get() getline cin

    #include<iostream> #include<string> using namespace std; int main() {     string title; ...

  8. P1308 统计单词数(cin,getline() ,transform() )

    题目描述 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数. 现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给 ...

  9. cin 与 getline

    cin空格截断 getline(cin,s) 换行结束 ....太愚蠢了

随机推荐

  1. HashTable, HashMap, LinkedHashMap, ConcurrentHashMap

    HashTable: 不允许null的key或value, 线程安全 HashMap: 允许一个null的key, 无限的null value, 非线程安全 LinkedHashMap: HashMa ...

  2. SPM paired t-test步骤

    首先感谢大神空里流霜耐心的讲解,这篇笔记内容主要是整理他的谆谆教导,虽然他也看不到>< 所有数据都要经过平滑. Paired t-test虽然在2nd-level analysis中,但是 ...

  3. Linux下源码安装ffmpeg及ffmpeg的简单使用说明

    一.编译安装 ffmpeg在安装时依赖的包和版本都很让人头疼,不同编译环境也各不相同.公司之前封装了一个又各种出错. 其实办法很简单,就是到官网一步一步按着做就行了:http://trac.ffmpe ...

  4. RMQ(ST算法)

    RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列a,回答若干询问RMQ(A,i,j)(i, j<=n),返回数列a中下标在i ...

  5. lecture2-NN结构的主要类型的概述和感知机

    Hinton课程第二课 一.NN结构的主要类型的概述 这里的结构就是连接在一起的神经元.目前来说,在实际应用中最常见的NN就是前向NN,他是将数据传递给输入单元,通过隐藏层最后到输出层的单元:一个更有 ...

  6. Python2.6-原理之类和oop(下)

    来自<python学习手册第四版>第六部分 五.运算符重载(29章) 这部分深入介绍更多的细节并看一些常用的重载方法,虽然不会展示每种可用的运算符重载方法,但是这里给出的代码也足够覆盖py ...

  7. WPF EventSetter Handler Command

    最近做一个工具,突然发现ListBox和ListView等列表控件的MouseDoubleClick事件有时候是获取不到当前双击的行对象数据的,比如这样写: <ListBox Grid.Row= ...

  8. HTTP 状态代码表示什么意思?

    HTTP 状态代码表示什么意思? 如果某项请求发送到您的服务器要求显示您网站上的某个网页,服务器将会返回 HTTP 状态码响应请求.此状态代码提供关于请求状态的信息,一些常见的状态代码为: 200 - ...

  9. 利用manifest文件对程序目录下的dll进行分类

    1 背景 对于大部分的券商和机构投资者,只能通过有交易所交易系统接入资质的券商提供的柜台系统来进行现货交易.相对于期货市场,现货市场的柜台系统千差万别,接入协议有明文字符串.二进制数据和FIX协议等, ...

  10. 浅析WPhone、Android的Back与Home键

    浅析WPhone.Android的Back与Home键 背景 本人一直在用诺基亚手机(目前是Nokia 925,Windows Phonre 8.1),在界面设计.应用多样性等方面没少受身边Andro ...