面向行的输入:get()与getline()

引入:

char a = 's';//这样的语句合法
char b = "s";//不合法
/*
"S"不是字符常量,他表示两个字符(S和\0)组成的字符串。
并且"S"表示的的是字符串所在的内存地址,相当于将一个内存地址赋给b
*/

cin使用空格、制表符、换行符来确定字符串的结束位置,这意味着cin在获取字符数组时只读取一个单词。读取该单词后,cin将该字符串放到该数组中,并自动在结尾添加空字符。

e.g.

char a[30];
char b[30];
cin>>a;
cin>>b;

当你输入

word1 word2

并敲下回车,cin>>a在word1后检测到空格结束

但程序不会再提示你要输入b

程序把word2留在输入队列中,当cin在输入队列中搜索时,发现了word2,cin读取word2并将它放在b数组中

getline()

  • 读取整行
  • 通过回车键输入的换行符来确定输入结尾
  • 可以使用cin.getline() 该函数有两个参数,第一个参数是用来储存输入行的数组名称,第二个参数是要读取的字符数(如果这个数是20,则函数最多读取19个字符,余下的空间用于存储自动在结尾处添加的空字符)。
  • getline()成员函数在读取指定数目的字符或遇到换行符时停止读取
  • !每次读取一行,通过换行符来确定行尾,但不保存换行符,相反,在存储字符串时,用空字符来替换换行符!

get()

  • 读取整行(同getline())

  • 通过回车键输入的换行符来确定输入结尾(同getline())

  • 可以使用cin.get() 与getline()函数接收的参数相同,解释参数的方式也相同。并且都读取到行尾

  • !但是,get不再读取并丢弃换行符,而是将其留在输入队列中!

    • 解决方法:

      • 可以用不带参数的get()函数来处理换行符
      cin.get(name,ArSize);
      cin.get();
      cin.get(dessert,ArSize);
      • 将两个类成员拼接起来
      cin.get(name,ArSize).get();

      ​ 可以这样操作是因为cin.get(name,ArSize)返回一个cin对象,该对象随后被用来调用get()函数

      • 同样,可以把输入中连续的两行分别读入两个数组中
      cin.getline(name1,ArSize).getline(name2,ArSize);

差异

  1. 为什么有时候用get而不用getline呢?

    老式实现没有getline(),其次get()使输入更仔细

    getline()使用起来简单一些,但get()使得检查错误更简单些

  2. 如何判断get是因为读取了整行而停止还是因为数组已填满?

    查看下一个字符,如果是换行符,说明已读取了整行输入,否则,该行中还有其他输入

可能出现问题

  1. 空行

    这两种函数的下一条输入语句将在上一次结束读取的位置开始读取

    get()读取空行后设置失效位时,意味着接下来的输入将被阻断,但可以用cin.clear()命令来恢复输入

  2. 输入的字符串可能比分配的空间长

    如果输入行包含的比指定的多,则两种函数会把余下的字符留在输入队列中,而getline()还会设置失效位,并关闭后面的输入

  3. 混合输入数字和字符串导致的问题

    cin输入一个数字类型,按下回车时,换行符留在了输入队列,下一次被getline()等看到换行符,将认为是一个空行,直接赋给数组

    解决方法是读取地址之前丢弃换行符

    可以用(cin>>year).get()或者cin>>year;get();

C++面向行输入:get()与getline()的更多相关文章

  1. 连续多行输入--C++ 中字符串标准输入的学习及实验(续篇)

      编程中常常会用到连续多行输入的情况,如果事先知道要输入多少行的话,可以直接定义一个变量,然后用循环就可以实现了,但有时候事先并不知道,要输入多少行,于是就可以用到输入流碰到文件终止符的情况了,具体 ...

  2. Java命令行输入求和的简单学习

    思想:命令行输入的参数,必须先转换为数字才能进行加法计算,这就需要引用java.util.Scanner; 流程框图: 源代码: //实现几个整数相加的程序 //高开拓,2015.9.26 packa ...

  3. MATLAB GUI程序设计中使文本框接收多行输入的方法

    对于文本框来说 Max属性于Min属性数值之差小于等于1时,仅接收单行输入 大于1时,接受多行输入 对于多行情况,set/get到的String应为cell 本系列文章允许转载,转载请保留全文! [说 ...

  4. 【Android 界面效果12】EditText中的多行输入问题

    ------- 源自梦想.永远是你IT事业的好友.只是勇敢地说出我学到! ---------- 我们在使用EditText进行多行输入的时候,通常的写法如下: <EditText android ...

  5. PyCharm命令行输入

    PyCharm命令行输入 写作原因 网上资料比较杂,版本较老,与现在的版本有区别,所以根据网上资料和自己亲手实验撰写此文. 设置方法 在菜单中按此路径设置: Run->Edit Configur ...

  6. Linux 命令行输入

    这几天刚刚接触到Linux,在windows上安装的VMWare虚拟机,Centos7.安装什么都是贾爷和办公室的同事帮忙搞定的. 在虚拟机界面,按快捷键Ctrl+Alt+Enter,可以全屏显示Li ...

  7. 在命令行输入python出现“Warning:This Python interpreter is in a conda environment, but the environment has not been activated. Libraries may fail to load. To activate this environment please see https://conda.

    [现象] 在命令行输入python出现“Warning:This Python interpreter is in a conda environment, but the environment h ...

  8. 安装需要的第三方库时,命令行输入pip提示不是内部或外部命令

    简介 在做Python开发时,安装需要的第三方库时,大多数人喜欢选择在命令行用pip进行安装. 然而有时敲入pip命令会提示‘pip’不是内部或外部命令..如图: 解决办法 1.在python安装目录 ...

  9. Web开发——HTML基础(HTML表单/下拉列表/多行输入)

    参考: 参考:http://www.w3school.com.cn/html/html_forms.asp 目录: 1.<form> 元素 1.1 <input> 元素(输入属 ...

随机推荐

  1. JDBC中的元数据——2.参数元数据

    package metadata; import java.sql.Connection; import java.sql.ParameterMetaData; import java.sql.Pre ...

  2. HbaseWAL

    1.WAL意为 Write Ahead Log ,类似MySQL中的binlog,用来做灾难恢复之用,HLog记录数据的所有变更,一旦数据修改,就可以从Log中进行恢复. Hbase采用类LSM的架构 ...

  3. Flink DataStream API 中的多面手——Process Function详解

    之前熟悉的流处理API中的转换算子是无法访问事件的时间戳信息和水位线信息的.例如:MapFunction 这样的map转换算子就无法访问时间戳或者当前事件的时间. 然而,在一些场景下,又需要访问这些信 ...

  4. 关闭 Scroll Lock

    通常,在电子表格中选择一个单元格并按箭头键时,所选内容会在各个单元格之间上下左右移动,具体取决于您按的箭头键.但是,如果在 Scroll Lock 处于开启状态时按箭头键,则向上或向下滚动一行.或者, ...

  5. MySQL 源码安装规范

    一 .目录规划 MySQL 的目录包括 base 目录和 data 目录,base 目录存放软件文件,每个版本的软件单 独一个目录,例如/usr/local/mysql/mysql5.6.19.dat ...

  6. 从kratos分析BBR限流源码实现

    什么是自适应限流 自适应限流从整体维度对应用入口流量进行控制,结合应用的 Load.CPU 使用率.总体平均 RT.入口 QPS 和并发线程数等几个维度的监控指标,通过自适应的流控策略,让系统的入口流 ...

  7. 【Python机器学习实战】决策树与集成学习(六)——集成学习(4)XGBoost原理篇

    XGBoost是陈天奇等人开发的一个开源项目,前文提到XGBoost是GBDT的一种提升和变异形式,其本质上还是一个GBDT,但力争将GBDT的性能发挥到极致,因此这里的X指代的"Extre ...

  8. 安装 Ubuntu 21.04 后必备的绝佳应用大合集(持续更新中)

    @ 目录 一.Google Chrome 浏览器 1.下载 2.安装 3.设置搜索引擎 二.火焰截图(替代QQ截图) 1.简介: 2.安装: 3.设置快捷键: 三.VLC视频播放器(替代Potplay ...

  9. Intel® QAT加速卡之Ring & Ring Bank

    1. QAT的应用模式 Intel 通讯系列芯片对于每种受支持的加速服务(加密,数据压缩),都支持以下应用模式: 内核模式,其中应用程序和加速服务都在内核中运行空间. 用户空间直接访问在用户空间中运行 ...

  10. Mybatis-Plus常用的查询方法--看这一篇就够了!!!

    前言: Mybatis-Plus作为Mybatis的增强,自己封装了很多简单还用的方法,来解脱自己写sql! 对于项目的搭建小编就不在说了,可以参考: SpringBoot+Mybatis-Plus的 ...