本文转自: http://blog.sina.com.cn/s/blog_60263c1c0101ck25.html
我的技术博客:www.cnblogs.com/overcode
  学习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))语句
注意这里默认回车符停止读入,按Ctrl+Z或键入EOF回车即可退出循环。
在这个语句中,首先getline从标准输入设备上读入字符,然后返回给输入流cin,注意了,是cin,所以while判断语句的真实判断对象是cin,也就是判断当前是否存在有效的输入流。在这种情况下,我想只要你的电脑不中毒不发神经你的输入流怎么会没有效?所以这种情况下不管你怎么输入都跳不出循环,因为你的输入流有效,跳不出循环。
然而有些同学误以为while判断语句的判断对象是line(也就是line是否为空),然后想通过直接回车(即输入一个空的line)跳出循环,却发现怎么也跳不出循环。这是因为你的回车只会终止getline()函数的读入操作。getline()函数终止后又进行while()判断(即判断输入流是否有效,你的输入流当然有效,满足条件),所以又运行getline()函数,所以,你懂了吧。。。

getline()详解相关推荐

  1. c++ getline()详解

    前言 getline()函数在c++中有两种用法,第一种定义在 < i s t r e a m > <istream> <istream>头文件中,第二种定义在 & ...

  2. C++中getline()与cin.getline()详解

    参考1:https://www.jb51.net/article/180408.htm 参考2:https://www.cnblogs.com/ymd12103410/p/9514896.html

  3. linux getline函数用法,Linux文本处理三剑客之awk学习笔记05:getline用法详解

    getline用法详解 在默认情况下,awk支持从文件或者STDIN中读取数据.我们也可以使用getline来灵活读取数据,例如在main代码块执行过程中读取某个非待处理文件的数据,或者从某个读取某个 ...

  4. C++的get()函数与getline()函数使用详解

    点击蓝字 关注我们 来源自网络,侵删 一.C++的get()函数使用详解 1.C++ get()函数 get()函数是cin输入流对象的成员函数,它有3种形式: 无参数的: 有一个参数的: 有3个参数 ...

  5. c语言getline函数什么意思,详解C++ cin.getline函数

    cin 虽然可以使用 cin 和 >> 运算符来输入字符串,但它可能会导致一些需要注意的问题. 当 cin 读取数据时,它会传递并忽略任何前导白色空格字符(空格.制表符或换行符).一旦它接 ...

  6. c语言getline作用,C++ cin.getline及getline()用法详解

    下面先看下C++ cin.getline用法,具体内容如下所示: 使用 C++ 字符数组与使用 string 对象还有另一种不同的方式,就是在处理它们时必须使用不同的函数集.例如,要读取一行输入,必须 ...

  7. C语言getline函数CSDN,c++中的两种getline用法详解

    getline是C++标准库函数:但不是C标准库函数,而是POSIX(IEEE Std 1003.1-2008版本及以上)所定义的标准库函数(在POSIX IEEE Std 1003.1-2008标准 ...

  8. 【OpenCV 4开发详解】深度神经网络应用实例

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...

  9. C++ string详解

    C++ string详解 -------------------------------------------------------------------------------- 来源:CSD ...

  10. 百度地图API详解之公交导航

    原文地址:http://blog.csdn.net/sup_heaven/article/details/8461593 只是作为备忘!!! 一次调试百度地图多marker事件监听的问题,不知如何解决 ...

最新文章

  1. APUE 学习笔记(一) Unix基础知识
  2. PHP实现简单顺序栈
  3. 分布式锁原理——redis分布式锁,zookeeper分布式锁
  4. Oracle 标准大页和透明大页
  5. hdu 1102 pku 2421 解题报告
  6. 北方大学 ACM 多校训练赛 第十五场 蜘蛛牌A
  7. netty java_Netty Java快速指南
  8. js udp通信_nodejs源码分析第十九章 -- udp模块
  9. freemodbus收藏学习网址
  10. jupyter ipython display_ipython jupyter notebook中显示图像和数学公式实例
  11. Atitit.编译原理与概论
  12. AllyCAD v3.5 R12 1CD(专业CAD软件)
  13. WinPE启动U盘工具箱 (通用PE工具箱ISO映像文件)
  14. 浅谈防勒索病毒方案之主机加固
  15. 线代第二章 矩阵 +行列式与矩阵的区别
  16. 服务器名称指示(SNI)是什么东东?
  17. 查询-SPJ练习3参考答案
  18. 微信公众号接入和获取用户信息
  19. 天问一号入轨火星成功,火星,我们来了!
  20. 教学相长——什么是真正的学习型人才

热门文章

  1. STM32 keyboard USB HID键盘功能的实现
  2. CUDA学习(二)-NVCC的编译过程及命令
  3. 事务的ACID特性如何实现
  4. java 换行符转换
  5. 用两条命令看出你买的H3C光模块是否是正品
  6. 偏度与峰度(附python代码)
  7. Latex排版[1]:输入矩阵(latex如何输入矩阵、对角阵、方程组)
  8. dparsf是什么_回顾:第五届DPABI/DPARSF特训营暨DPABISurf加强营
  9. 牛客网sql练习笔记(二)
  10. 计算机史前时代名人堂0-总概