C++ iostream:使用cin >> var和getline(cin,var)输入错误

mig*_*lla 2 c++ ignore input cin getline

我正在用C++创建一个简单的控制台应用程序,它从用户那里获取字符串和字符串输入.为了简单起见,我想使用stringchar数据类型将输入从cin传递给.

要获取字符串输入,我使用的是getline方法:

string var;
cin.ignore(); //I used ignore() because it prevents skipping a line after using cin >> var
getline(cin, var);
Run Code Online (Sandbox Code Playgroud)

要获取char输入,我使用cin >> var方法:

char var;
cin >> var;
Run Code Online (Sandbox Code Playgroud)

这在大多数情况下都可以正常工作.但是,当我使用getline输入字符串时,它会忽略我的字符串的第一个字符.

是否可以使用getlinecin >>而不必使用ignore,或者我可以调用的方法以确保不跳过我的第一个字符?

这是我使用getlinecin >>的完整代码示例:

string firstName;
string lastName;
char gender = 'A';

cout << "First Name: ";
cin.ignore();
getline(cin, firstName);


cout << "Last Name: ";
cin.ignore();
getline(cin, lastName);

while(genderChar != 'M' && genderChar != 'F')
{
    cout << "Gender (M/F): ";
    cin >> genderChar;
    genderChar = toupper(genderChar);
}
Run Code Online (Sandbox Code Playgroud)

P0W*_*P0W 6

cin>>var;

var从缓冲区抓取它,它离开\n缓冲区,然后立即抓住它getline

所以,以下就好了,(如果我理解你的问题)

cin>>var;
cin.ignore();     //Skip trailing '\n'
getline(cin, var);
Run Code Online (Sandbox Code Playgroud)

根据您编辑的帖子

您不必使用cin.ignore();geline

这将从缓冲区中提取字符并将它们存储到firstName或(lastName)中,直到这里的分隔字符-newline('\n').