C++面向行输入:get()与getline()
面向行的输入: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);
差异
为什么有时候用get而不用getline呢?
老式实现没有getline(),其次get()使输入更仔细
getline()使用起来简单一些,但get()使得检查错误更简单些
如何判断get是因为读取了整行而停止还是因为数组已填满?
查看下一个字符,如果是换行符,说明已读取了整行输入,否则,该行中还有其他输入
可能出现问题
空行
这两种函数的下一条输入语句将在上一次结束读取的位置开始读取
get()读取空行后设置失效位时,意味着接下来的输入将被阻断,但可以用cin.clear()命令来恢复输入
输入的字符串可能比分配的空间长
如果输入行包含的比指定的多,则两种函数会把余下的字符留在输入队列中,而getline()还会设置失效位,并关闭后面的输入
混合输入数字和字符串导致的问题
cin输入一个数字类型,按下回车时,换行符留在了输入队列,下一次被getline()等看到换行符,将认为是一个空行,直接赋给数组
解决方法是读取地址之前丢弃换行符
可以用(cin>>year).get()或者cin>>year;get();
C++面向行输入:get()与getline()的更多相关文章
- 连续多行输入--C++ 中字符串标准输入的学习及实验(续篇)
编程中常常会用到连续多行输入的情况,如果事先知道要输入多少行的话,可以直接定义一个变量,然后用循环就可以实现了,但有时候事先并不知道,要输入多少行,于是就可以用到输入流碰到文件终止符的情况了,具体 ...
- Java命令行输入求和的简单学习
思想:命令行输入的参数,必须先转换为数字才能进行加法计算,这就需要引用java.util.Scanner; 流程框图: 源代码: //实现几个整数相加的程序 //高开拓,2015.9.26 packa ...
- MATLAB GUI程序设计中使文本框接收多行输入的方法
对于文本框来说 Max属性于Min属性数值之差小于等于1时,仅接收单行输入 大于1时,接受多行输入 对于多行情况,set/get到的String应为cell 本系列文章允许转载,转载请保留全文! [说 ...
- 【Android 界面效果12】EditText中的多行输入问题
------- 源自梦想.永远是你IT事业的好友.只是勇敢地说出我学到! ---------- 我们在使用EditText进行多行输入的时候,通常的写法如下: <EditText android ...
- PyCharm命令行输入
PyCharm命令行输入 写作原因 网上资料比较杂,版本较老,与现在的版本有区别,所以根据网上资料和自己亲手实验撰写此文. 设置方法 在菜单中按此路径设置: Run->Edit Configur ...
- Linux 命令行输入
这几天刚刚接触到Linux,在windows上安装的VMWare虚拟机,Centos7.安装什么都是贾爷和办公室的同事帮忙搞定的. 在虚拟机界面,按快捷键Ctrl+Alt+Enter,可以全屏显示Li ...
- 在命令行输入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 ...
- 安装需要的第三方库时,命令行输入pip提示不是内部或外部命令
简介 在做Python开发时,安装需要的第三方库时,大多数人喜欢选择在命令行用pip进行安装. 然而有时敲入pip命令会提示‘pip’不是内部或外部命令..如图: 解决办法 1.在python安装目录 ...
- Web开发——HTML基础(HTML表单/下拉列表/多行输入)
参考: 参考:http://www.w3school.com.cn/html/html_forms.asp 目录: 1.<form> 元素 1.1 <input> 元素(输入属 ...
随机推荐
- pyspark启动与简单使用----本地模式(local)----shell
在Spark中采用本地模式启动pyspark的命令主要包含以下参数:–master:这个参数表示当前的pyspark要连接到哪个master,如果是local[*],就是使用本地模式启动pyspark ...
- Servlet常见问题
时间:2016-12-6 23:18 java.lang.ClassNotFoundException: org.apache.commons.collections.FastHashMapcommo ...
- 学习小计: Kaggle Learn Time Series Modeling
ARIMA模型,参数含义参考:https://www.cnblogs.com/bradleon/p/6827109.html from statsmodels.tsa.arima_model impo ...
- 一、Git分布式版本控制系统
1.引入 在开发一个软件项目时,本地只有几十行代码或几百行代码时还可以维护,但当代码达到一定的数量后或两三个人共同开发一个项目时,就很容易会出现代码混乱.冲突.排错难等问题.一旦开发完工以后发现整个项 ...
- 集合框架3-Arrays 类
Arrays 和 Collections是分别操作数组和集合的两个工具类.今天就来对 Arrays 中的内容作个总结. 一.Arrays 类概述 Arrays 类位于 java.util包中.Arra ...
- 【曹工杂谈】说说Maven框架和插件的契约
说说Maven框架和插件的契约 前言 Maven框架就像现在公司内的各种平台方,规定一些契约,然后想办法拉动业务方,一起在这个平台上去做生态共建.Maven也是这样,其实它就是一个插件执行的框架,Ma ...
- fetch ios低版本兼容cannot clone a disturbed response
报错信息 ios 11以下 cannot clone a disturbed response github.com/github/fetc- 问题发生场景 使用了一个或者多个三方库 三方库或者自己的 ...
- CSS004. 自定义滚动条样式(webkit)
CSS /* 滚动条宽度 */ ::-webkit-scrollbar { width: 6px; } /* 轨道样式 */ ::-webkit-scrollbar-track { backgroun ...
- 【第十七篇】- Maven Web 应用之Spring Cloud直播商城 b2b2c电子商务技术总结
Maven Web 应用 本章节我们将学习如何使用版本控制系统 Maven 来管理一个基于 web 的项目,如何创建.构建.部署已经运行一个 web 应用. 创建 Web 应用 我们可以使用 mave ...
- SpringBoot自定义初始化Bean+HashMap优化策略模式实践
策略模式:定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户. 传统的策略模式一般是创建公共接口.定义公共方法-->然后创建实体类实现公共接口.根据各自的 ...