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

首先来看一下输入输出运算符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. Javascript备忘复习笔记2

    一.函数与形参 1.函数 function abs(x) { if (x >= 0) { return x; } else { return -x; } } alert(abs(-10)); 2 ...

  2. ubuntu14.04安装sipp3.2

    本来在centos里不好装的软件,往往ubuntu里会很好装,但sipp恰恰相反,ubuntu里能装死你. 做VOIP测试的话,有时候为了模拟通话中更好的抓包,在环境简陋,又不想使用集线器引起广播风暴 ...

  3. Win10添加简体中文美式键盘的方法

    在Win10中很多朋友发现没有简体中文(美式键盘)的选项,而如果使用“英语-美式键盘”作为默认输入法,有ModernApp的界面会变成英文,这十分不方便,那么有没有方可以在Win10中添加一个 简体中 ...

  4. Swagger 增加 DocumentFilter 隐藏不需要显示的接口

    services.ConfigureSwaggerGen(options => { options.SingleApiVersion(new Info { Version = "v1& ...

  5. css 内容超过容器宽度,checkbox等控件不会随着内容延伸

    <div a> <div id='内容容器'> <div>很长的内容</div><input type='checkbox'/> </ ...

  6. codevs 3369 膜拜

    3369 膜拜 http://codevs.cn/problem/3369/ 题目描述 Description 神牛有很多-当然-每个同学都有自己衷心膜拜的神牛.某学校有两位神牛,神牛甲和神牛乙.新入 ...

  7. Theano2.1.2-基础知识之第一步:代数

    来自:http://deeplearning.net/software/theano/tutorial/adding.html Baby Steps - Algebra 一.两个标量相加 在学习the ...

  8. 读懂IL代码就这么简单 (一)

    一前言 感谢 @冰麟轻武 指出文章的错误之处,现已更正 对于IL代码没了解之前总感觉很神奇,初一看完全不知所云,只听高手们说,了解IL代码你能更加清楚的知道你的代码是如何运行相互调用的,此言一出不明觉 ...

  9. Chrome 监听 console 打开

    这个算是 Chrome only 其他的我没测试,也不想测试.因为我的控制台脚本仅仅在 Chrome 下加载. 如果你需要全平台,那么这肯定不是你需要的结果. 需求 其实我很早就想折腾这个了,但是,, ...

  10. 从语言到库到框架,再到API,再到标记最后到DSL语言

    计算机技术发展很快,而且越来越快,结果也是越来越复杂,那么我们到底怎么搞定复杂性并重用代码? 很明显,这是个大难题.一开始我们要解决计算问题,发展了基本的编程语言. 很快,编程语言不能满足需求,我们需 ...