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'.
中
#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'.
中