ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C++中getline函数的用法

2020-04-21 19:07:33  阅读:206  来源: 互联网

标签:city name cin C++ 用法 空格 getline 输入 string


总结:cin 会忽略前导的空格字符,且会以中间的空格字符为分界;getline(cin, inputLine)函数可读取整行,包括前导和嵌入的空格,并将其存储在字符串对象中。

 

虽然可以使用 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: ";    //输入John Doe
    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

 

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

 

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

getline(cin, inputLine);

其中 cin 是正在读取的输入流,而 inputLine 是接收输入字符串的 string 变量的名称。

 

下面的程序演示了 getline 函数的应用:

#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

参考:http://c.biancheng.net/view/1345.html 

标签:city,name,cin,C++,用法,空格,getline,输入,string
来源: https://www.cnblogs.com/hemengjita/p/12747085.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有