zoukankan      html  css  js  c++  java
  • C++IO关于cin>>和getline的理解

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

    首先来看一下输入输出运算符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的状态

              

    亲爱的听众朋友我是你的代班DJ
  • 相关阅读:
    selenium webdriver简介
    web自动化selenium环境搭建
    web自动化基础之web页面组成
    接口测试基础八--接口自动化前期准备
    小程序测试关注点之一-登录授权
    python实现十大经典算法
    pytest 框架之pytest-html报告生成
    pytest 框架与 unittest 框架的对比
    selenium _上传操作
    selenium 常见操作,使用 js 操作-日期框及文本框
  • 原文地址:https://www.cnblogs.com/YTYMblog/p/5930692.html
Copyright © 2011-2022 走看看