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

时间:2015-03-16 21:44:37

标签: c++ stream

#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()打印第二个名字。有没有办法打印两个?

3 个答案:

答案 0 :(得分:1)

当您使用cin >> name读取输入时,输入将在第一个空格处停止(空白,制表符,换行符)。所以它只读“约翰”。

当你再打电话给getline()时,它会继续停在它的位置,从“史密斯”开始,一直读到这一行的结尾。

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

答案 1 :(得分:1)

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读了第一个名字,但没有把它放在'名字'中。

答案 2 :(得分:0)

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

如果您想要字符串变量名中的名字和姓氏,则只应使用getline(cin,name)