C++通过getline读取一行输入

如果用cin读取字符串,则其会在读到空格之后停止。

比如说,我们写这样一个程序:

#include <iostream>
#include <string>

int main()
{
    std::string first_name;
    std::string last_name;
    
    std::cout << "what is your first name?" << std::endl;
    std::cin >> first_name;

    std::cout << "what is your last name?" << std::endl;
    std::cin >> last_name;

    std::cout << "Your name is: " << last_name << " " << first_name << std::endl;

    return 0;
}

有的时候一个人的名字中间可能有空格,比如说,其first_name为"Mei mei"

则输出如下:

因为读到Mei后面的空格cin结束,所以last_name 读入Mei,程序结束

我们不想这样,那怎么读入一行呢?使用getline()函数

修改程序为:

#include <iostream>
#include <string>

int main()
{
    std::string first_name;
    std::string last_name;
    
    std::cout << "what is your first name?" << std::endl;
    getline(std::cin, first_name);

    std::cout << "what is your last name?" << std::endl;
    getline(std::cin, last_name);

    std::cout << "Your name is: " << last_name << " " << first_name << std::endl;

    return 0;
}

getline的第一个参数指定从哪里读取信息(即std::cin的标准输入流),第二个参数指定读取的位置

运行这个程序:

可见得到正确结果