我正在用C++创建一个简单的控制台应用程序,该应用程序从用户那里获取字符串和字符输入。为简单起见,我想使用字符串和 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 >> ,而不必使用忽略,或者可以调用一种方法来确保不跳过第一个字符?
这是完整的代码示例,其中我同时使用 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);
按照您的编辑的帖子
您不必将
cin.ignore();
用作geline
这将从缓冲区中提取字符,并将其存储到
firstName
或(lastName
)中,直到此处的定界字符-newline('\n'
)。关于c++ - C++ iostream:使用cin >> var和getline(cin,var)输入错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18348350/