getline()函数详解

学习C++的同学可能都会遇到一个getline()函数,譬如在C++premer中,标准string类型第二小节就是“用getline读取整行文本”。书上给的程序如下:
int main()
{
   string line:
   while(getline(cin,line))
   cout<<line<<endl;
   return 0;
}
大家会发现运行时怎么也跳不出循环,甚至会发生各种莫名其妙的错误。这是为什么呢?在这里我给大家做一个详细的讲解。
首先给大家介绍一下getline()函数(个人觉得百度百科给的果断不够详细)
大家百度会发现getline()的原型是istream& getline ( istream &is , string &str , char delim );
其中 istream &is 表示一个输入流,譬如cin;string&str表示把从输入流读入的字符串存放在这个字符串中(可以自己随便命名,str什么的都可以);char delim表示遇到这个字符停止读入,在不设置的情况下系统默认该字符为'\n',也就是回车换行符(遇到回车停止读入)。给大家举个例子:
string line;
cout<<"please cin a line:"
getline(cin,line,'#');
cout<<endl<<"The line you give is:"line;
那么当我输入"You are the #best!" 的时候,输入流实际上只读入了"You are the ",#后面的并没有存放到line中(应该是在缓冲区里吧)。然后程序运行结果应该是这样的:
please cin a line:You are the #best!
The line you give is:You are the 
而且这里把终止符设为#,你输入的时候就算输入几个回车换行也没关系,输入流照样会读入,譬如:
                             please cin a line:You are the best!
//这里输入了一个回车换行
     Thank you!
     #   //终止读入
     The line you give is:You are the best!
//换行照样读入并且输出
       Thank you!
以上就是getline()函数一个小小的实例了。
那么如果把getline()作为while的判断语句会怎么样呢?
让我们一起来分析一下while(getline(cin,line))语句
注意这里默认回车符停止读入,如果要退出循环。

1.在windows下输入:CTRL+Z+Enter;

2.在Linux/Unix/Mac操作系统下输入:CTRL+D+Enter。

EOF:计算机术语,缩写通常为EOF(End Of File),在操作系统中表示资料源无更多的资料可读取。资料源通常称为档案或串流。


在这个语句中,首先getline从标准输入设备上读入字符,然后返回给输入流cin,注意了,是cin,所以while判断语句的真实判断对象是cin,也就是判断当前是否存在有效的输入流。在这种情况下,我想只要你的电脑不中毒不发神经你的输入流怎么会没有效?所以这种情况下不管你怎么输入都跳不出循环,因为你的输入流有效,跳不出循环。

然而有些同学误以为while判断语句的判断对象是line(也就是line是否为空),然后想通过直接回车(即输入一个空的line)跳出循环,却发现怎么也跳不出循环。这是因为你的回车只会终止getline()函数的读入操作。getline()函数终止后又进行while()判断(即判断输入流是否有效,你的输入流当然有效,满足条件),所以又运行getline()函数,所以,你懂了吧。。。



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/432696.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android 获取和设置屏幕亮度

/**获取屏幕亮度 / public static int getScreenBrightness(Activity activity){ int value 0; ContentResolver cr activity.getContentResolver(); try{ value Settings.System.getInt(cr,Settings.System.SCREEN_BRIGHTNESS); }catch(SettingNotFoundException e){ } ret…

为什么不能睁一只眼闭一只眼_自媒体人上哪里找非常多的原创短视频素材?我为什么一定要你做原创?...

现在短视频非常火&#xff0c;很多人都想拍摄3-5分钟的视频&#xff0c;因为各个平台对于视频的收益补贴简直太大了&#xff0c;比文章大多了&#xff0c;目的就是为了让大家多去创作视频。但是创作视频真的不容易&#xff0c;于是很多人就是想起了搬运&#xff0c;把某个人在A…

计算机控制的点火系统由,第八节(点火系统)

1、点火系统作用(1)将蓄电池电压12V&#xff0c;转换成点火系统需要极高的电压,并分配到各缸。(2)适时地点燃发动机气缸内的空气和燃油的混合气体。相关阅读&#xff1a;浅谈汽车电子稳定程序系统(ESP)驱动的革命 本田SH-AWD四轮驱动详解看丰田专家如何解释发动机转速升高2、对…

搭建Windows Embedded Compact 7开发环境

大家期盼已久的WindowsEmbedded Compact 7是微软2010年发布的第七代嵌入式操作系统&#xff01;微软可谓对它寄予很大的希望&#xff0c;所以连名字都改了。以下就简称WEC7吧。WEC7 的最大亮点就是引入了Silverlight 使用Expression blend 3 作为UI的首选开发&#xff0c;当然这…

volatile关键字的使用

volatile变量直接在CPU和内存之间交换&#xff0c;不通过一级、二级缓存。考虑下面的代码&#xff1a;代码&#xff1a;123456789101112131415161718class Gadget{public:void Wait() {while (!flag_){Sleep&#xff08;1000); // sleeps for 1000 milliseconds}}void Wakeup()…

微信小程序页面栈_微信小程序使用页面栈改变上一页面的数据

微信小程序中如果从一个页面中进入下一个页面&#xff0c;如果下个页面的数据有删除或者增加再返回上一个页面的时候&#xff0c;就会导致页面不刷新(数据加载函数在onload中)&#xff0c;从而造成数据不一致的情况。其实在微信小程序中是可以实现改变上一个页面中的数据似的前…

华中师范大学计算机考研论坛,2020年华中师范大学计算机考研经验分享

本人是2020年考入华中师范大学计算机专业硕士的学生&#xff0c;已成功上岸&#xff0c;下面给大家分享一下我的个人考研经验。我为什么考研我从大一就已经确定要考研&#xff0c;毕竟自己错过了高考这样的机会&#xff0c;希望自己的人生能再一次重新洗牌&#xff0c;不受人冷…

OSD锁定怎么解锁?

方法是这样的&#xff1a; 先按中间的建关掉显示器电源&#xff0c;关了显示器后按住左键&#xff0c;在按中间的建开机&#xff0c;这时屏幕闪一下就解锁了。在按中间的建打开显示器就行了。 加锁的方法和解锁一样转载于:https://www.cnblogs.com/code4app/p/3667351.ht…

can帧格式 dlc_深度解析CAN

随着当今工业的发展&#xff0c;尤其是在CAN根据CAN规范ISO11898-2所定义的标准帧结构&#xff0c;一帧报文最大只能传输64位(8个字节)的数据&#xff0c;在最好的情况下总线负载达到70%左右&#xff0c;不过如果报文数据少于8个字节的情况下总线负载可能会更小。我们或者会提出…

离散数学图论旅行规划问题_《图论及其应用》(一)

点击返回目录 一. 定义1.1 图的基本概念图或有序对或序偶&#xff08;P1&#xff09;、有限图/平凡图/非平凡图/空图&#xff08;P1&#xff09;、顶点数或阶数/边数/重数/重边/环&#xff08;P1&#xff09;、简单图/复合图&#xff08;P1&#xff09;、相邻&#xff08;P2&am…

ELF文件和BIN文件

文件的内容&#xff1a;1. BIN文件是 raw binary 文件&#xff0c;这种文件只包含机器码。2. ELF文件除了机器码外&#xff0c;还包含其它额外的信息&#xff0c;如段的加载地址&#xff0c;运行地址&#xff0c;重定位表&#xff0c;符号表等。所以ELF文件的体积比对应的BIN文…

计算机辅助项目管理课程方案,天津大学计算机辅助管理研究生课程简介

8 / 14【育明教育】中国考研考博专业课辅导第一品牌 官方网站&#xff1a;http://www.doczj.com/doc/e25fb4dad4d8d15abe234eb2.html8《翻译硕士英语》重点考察考生的英语水平&#xff0c;内容包括&#xff1a;词汇语法、阅读理解、英语写作等&#xff0c; 总分 100 分。 二、考…

android list 替换元素_Python数据结构(一)List使用(大厂面试解答)

List是什么&#xff1f;List顾名思义就是列表&#xff0c;那么它具体描述是什么呢&#xff1f;列表是一个线性的集合&#xff0c;它允许用户在任何位置插入、删除、访问和替换元素。在Python中list是保留字&#xff0c;List中的每个元素都有自己的编号&#xff0c;很像C、C、ja…

河北2018年职称计算机开始,2018河北职称计算机考试操作题答案(8页)-原创力文档...

PAGEPAGE 131、说明&#xff1a;以下文件名及文件夹名均不区分大小写&#xff0c;而且所有字母和数字都是英文半角字符1、?在ComputerA文件夹下建立如下的文件夹结构&#xff1a;(4分)????ComputerA?———北京——海淀区??????????????|?????????…

mkenvimage

mkenvimage -s bin文件size -o uboot-env.bin uboot-env.txt

关于php的字符串编码

PHP中的字符串可以用四中方式来定义&#xff1a; 单引号&#xff0c;双引号&#xff0c;Nowdoc结构 &#xff0c; heredoc 结构 也就说用这四中方式命名的字符串不管有没有值&#xff0c;都是字符串类型的变量。 但是&#xff0c;字符串遍历是已经定义好了怎么操作这些字符串&a…

java 获取打印机缺纸_JAVASE 语言概述和JAVA

第一章&#xff1a;开发前言计算机分为硬件和软件&#xff0c;一般来说。硬件就是组成计算机的可见的物理组件。我们的电脑、手机、电子设备都算一个小的计算机。而软件提供看不见的指令&#xff0c;这些指令控制硬件并且通过硬件完成特定任务。常见硬件&#xff1a;CPU、内存、…

计算机图形处理与应用程序,计算机图形处理与应用

本文主要介绍了计算机图形图像处理的基本概念;导出三维图形几何变换矩阵的一般形式;简要介绍了消隐技术;介绍了AutoLISP语言的功能、特点及绘图程序,并结合简单实例,展示了开发的实际效果。计算机图形处理及其应用摘要计算机图像处理技术产生于上个世纪80年代末&#xff0c;经历…

ARM Linux 3.x的设备树(Device Tree)

宋宝华 Barry Song <21cnbaogmail.com>1. ARM Device Tree起源 Linus Torvalds在2011年3月17日的ARM Linux邮件列表宣称“this whole ARM thing is a f*cking pain in the ass”&#xff0c;引发ARM Linux社区的地震&#xff0c;随后ARM社区进行了一系列的重大修正。在…

冯诺依曼原理中计算机包括功能部件,水泥越细,强度发展越快,对混凝土性能也越好...

现象其结定相同的不一果却&#xff0c;水泥现象现象现象确定模糊机现非随随机&#xff0c;下同的条件在相&#xff0c;称为。、越细越快也效期望强度联性某价C激励激励、关值B水平&#xff0c;需要学习得到的机脱产会”“我非常是否属于。下面不是哪个功能够完成的操作页能开始…