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