虽然可以使用 cin 和 >> 运算符来输入字符串,但它可能会导致一些需要注意的问题。

当 cin 读取数据时,它会传递并忽略任何前导白色空格字符(空格、制表符或换行符)。一旦它接触到第一个非空格字符即开始阅读,当它读取到下一个空白字符时,它将停止读取。以下面的语句为例:
cin >> namel;

可以输入 “Mark” 或 “Twain”,但不能输入 “Mark Twain”,因为 cin 不能输入包含嵌入空格的字符串。下面程序演示了这个问题:

#include <iostream>
#include <string> // Header file needed to use string objects
using namespace std;
int main()
{string name;string city;cout << "Please enter your name: ";cin >> name;cout << "Enter the city you live in: ";cin >> city;cout << "Hello, " << name << endl;cout << "You live in " << city << endl;return 0;
}

程序输出结果:
Please enter your name: John Doe
Enter the city you live in: Hello, John
You live in Doe

请注意,在这个示例中,用户根本没有机会输入 city 城市名。因为在第一个输入语句中,当 cin 读取到 John 和 Doe 之间的空格时,它就会停止阅读,只存储 John 作为 name 的值。在第二个输入语句中, cin 使用键盘缓冲区中找到的剩余字符,并存储 Doe 作为 city 的值。

为了解决这个问题,可以使用一个叫做 getline 的 C++ 函数。此函数可读取整行,包括前导和嵌入的空格,并将其存储在字符串对象中。

getline 函数如下所示:
getline(cin, inputLine);

其中 cin 是正在读取的输入流,而 inputLine 是接收输入字符串的 string 变量的名称。下面的程序演示了 getline 函数的应用:

// This program illustrates using the getline function
//to read character data into a string object.
#include <iostream>
#include <string> // Header file needed to use string objects
using namespace std;
int main()
{string name;string city;cout << "Please enter your name: ";getline(cin, name);cout << "Enter the city you live in: ";getline(cin, city);cout << "Hello, " << name << endl;cout << "You live in " << city << endl;return 0;
}

程序输出结果:
Please enter your name: John Doe
Enter the city you live in: Chicago
Hello, John Doe
You live in Chicago

C++ getline函数用法详解相关推荐

  1. C++ 中的getline()函数用法详解

    遇到了要输入一行字符串的操作,我想除了fgets()的方法(fgets()用法链接),getline()也是可以的,但是我对getline的操作不熟悉,便查阅了很多资料,发现都说的很模糊,借这个机会我 ...

  2. getline()与cin.getline()函数用法详解

    getline()函数可以让我们很方便的输入一串字符串.getline()不仅简单,而且安全,因为全局函数 getline() 会帮你处理缓冲区用完之类的麻烦.常见的getline()函数语法有两条: ...

  3. C++getline函数用法详解

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

  4. ROW_NUMBER() OVER()函数用法详解 (分组排序 例子多)

    ROW_NUMBER() OVER()函数用法详解 (分组排序 例子多) https://blog.csdn.net/qq_25221835/article/details/82762416 post ...

  5. C++中substr()函数用法详解

    C++中substr()函数用法详解 原型: string substr (size_t pos = 0, size_t len = npos) const; 返回一个新构造的string对象,其值初 ...

  6. LayoutInflater的inflate函数用法详解

    LayoutInflater的inflate函数用法详解 LayoutInflater作用是将layout的xml布局文件实例化为View类对象. 获取LayoutInflater的方法有如下三种: ...

  7. c++ memset 语言_C++中memset函数用法详解

    本文实例讲述了C++中memset函数用法.分享给大家供大家参考,具体如下: 功 能: 将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值,块的大小由第三个参数指定,这个函数通常 ...

  8. mysql: union / union all / 自定义函数用法详解

    mysql: union / union all http://www.cnblogs.com/wangyayun/p/6133540.html mysql:自定义函数用法详解 http://www. ...

  9. python中mat函数_Python中flatten( )函数及函数用法详解

    flatten()函数用法 flatten是numpy.ndarray.flatten的一个函数,即返回一个一维数组. flatten只能适用于numpy对象,即array或者mat,普通的list列 ...

最新文章

  1. matlab找出二维矩阵中最大值的位置或者最小值的位置
  2. An example of parsing xml file using Scala
  3. 必须Mark下,2019 年度中国质量协会质量技术优秀奖
  4. JavaScript条形码生成插件 - 封装篇
  5. 转载:世上最全的百物妙用窍门-绝对不能错过,不断更新中
  6. 优秀的管理者如何带好团队(这几个技巧你是否学会)
  7. 非线性光纤光学_光学青年| 刘兆军教授与晶体光纤激光技术研究,做核心材料和器件...
  8. [转]色度抽样(4:2:0)到底是什么意思?
  9. python实用程序育儿法下载_Python机器学习经典实例
  10. Unity3d第一人称视角如何设置
  11. Mac下导入virtualenv报错:its parent directory is not owned by the current user
  12. JAVA经典面试题(来源于互联网)
  13. 用于2D动画的实时嘴型同步技术
  14. 传奇背词 商业经济类第一篇 消费者该怎么做?
  15. GYctf-BFnote IO_FILE还可以这样利用
  16. R语言data.table详解
  17. 初心易得, 始终难守
  18. 基于QT的网络视频会议系统---KNVM
  19. 技嘉z97 服务器系统,BIOS界面再升级:Startup导航简单好用_技嘉 G1.Sniper Z97_主板评测-中关村在线...
  20. 快播王欣首次公开狱中信件:每天看书,因害怕与外界脱节

热门文章

  1. 投融界:创业路上,有项目如何找投资人
  2. 个人所得税每个月都已经缴纳了,为什么年收入超过12万还需要再次申报?
  3. mysql三叶草_外链代发包收录外链是否有用三叶草带你了解
  4. Java 匿名类(匿名内部类)
  5. 华为ct5000瘦客户机_第八集[达特分享]华为CT5000一键刷BIOS安装OpenWRT制作软路由...
  6. js判断生效时间不得大于失效时间
  7. 孙溟㠭篆刻《药生尘》——纪念吴孟超院士精神永在
  8. DFT Compiler极简示例1
  9. 国内如何购买Google Colab会员
  10. 计算机考试感受作文,考试的感受作文(集锦15篇)