我正在用 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);
为了获取字符输入,我使用了 cin >> var 方法:
char var;
cin >> var;
这在大多数情况下工作正常。但是,当我使用 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);
}
最佳答案
cin>>var;
仅从缓冲区中获取 var
,将 \n
留在缓冲区中,
然后立即被 getline
所以,下面是很好的,(如果我理解正确你的问题)
cin>>var;
cin.ignore(); //Skip trailing '\n'
getline(cin, var);
根据您的编辑帖子
你不必为 geline
使用 cin.ignore();
这从缓冲区中提取字符并将它们存储到 firstName
或 (lastName
) 直到此处的分隔符 -newline ('\n'
).
关于c++ - 为什么在 cin.ignore() 之后 getline(cin, var) 不读取字符串的第一个字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18348350/