C++ 新手,想知道 getline() 和 cin 在我的代码中做了什么

New to C++ and wondering what getline() and cin are doing in my code

#include <iostream>
#include <string>

using namespace std;

void computeFeatures( string );

int main(int argc, const char * argv[])
{
string name;

cout<< "Please enter your full name" << endl;

cin >> name;

cout << "Welcome" << name << endl;

cout << "Please re-enter your full name: ";

getline(cin, name);

cout << "Thanks, " << name << endl;

return 0;
}

输出是这样的:

Please enter your full name
John Smith
WelcomeJohn
Please re-enter your full name: Thanks,  Smith

我想我的问题是为什么 cin 打印出名字,为什么 getline() 打印出第二个名字。有没有办法同时打印两者?

当您使用 cin >> name 读取输入时,输入在第一个 space 处停止(空白、制表符、换行符)。所以它只读取 "John"。

当您随后调用 getline() 时,它会从停止的地方继续,从 "Smith" 开始,一直读到这一行的末尾。

如果您想使用 >> 开始阅读,然后跳过剩余的输入直到下一行,您可以使用:cin.ignore(SIZE_MAX, '\n');

cin 将第一个单词作为输入,由 space 分隔的第二个单词在输入缓冲区中等待。因此 getline() 自动获取姓氏,甚至不等待任何用户输入。

如果您希望在字符串变量名称中同时包含名字和姓氏,您应该只使用 getline(cin,name)

cin 只读取第一个单词,getline 读取直到它得到一个 /n。所以如果你想打印两者你应该这样做:

cout<< "Please enter your full name" << endl;

getline(name);

cout << "Welcome" << name << endl;

cout << "Please re-enter your full name: ";

getline(name);

cout << "Thanks, " << name << endl;

此外,当您说 getline(cin, name) 时,您首先使用 getline 读取名字,然后使用 getline 读取输入的其余部分,并且您只将姓氏放入 'name' 因为您已经阅读了带有 cin 的名字,但没有将其放在 'name'.