mig*_*lla 2 c++ ignore input cin getline
我正在用C++创建一个简单的控制台应用程序,它从用户那里获取字符串和字符串输入.为了简单起见,我想使用string和char数据类型将输入从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输入字符串时,它会忽略我的字符串的第一个字符.
是否可以使用getline和cin >>而不必使用ignore,或者我可以调用的方法以确保不跳过我的第一个字符?
这是我使用getline和cin >>的完整代码示例:
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)
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').