我在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);
要获取char输入,我使用 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);
}
4 回答
cin>>var;
只从缓冲区抓取
var
,它将\n
留在缓冲区中,然后立即被getline
抓取所以,以下就好了,(如果我理解你的问题)
根据你的 edited 帖子
您不必使用
cin.ignore();
forgeline
这将从缓冲区中提取字符并将它们存储到
firstName
或(lastName
)中,直到此处的分隔字符-newline('\n'
) .ignore()
不跳过一行,它会跳过一个字符 . 你能发送示例代码并详细说明是否需要cin.ignore()
?std::cin.ignore()
将忽略输入的第一个字符 .对于您的情况,请在
std::cin
之后使用std::cin.ignore()
,然后使用getline()
忽略换行符:您在
std::getline()
之前使用std::isstream::ignore()
.std::cin.ignore()
将从输入序列中提取第一个字符并将其丢弃 .http://www.cplusplus.com/reference/istream/istream/ignore/