我正在用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/

10-11 22:42
查看更多