我正在用C ++学习cin.get()
,并试图将两个字符(包括空格)回传给用户。
在运行代码时,它不会正确地回显输入。
char letter1, letter2;
cout << "Enter Letters: ";
cin >> letter1 >> letter2;
cin.get(letter1);
cin.get(letter2);
cout << "letter1 is: " << letter1 << " end.\n";
cout << "letter2 is: " << letter2 << " end.\n";
我打算输入2和3,但这给了我不同的结果:
输入 (出于某种原因,我不得不两次键入3)
Enter Letters:2
3
3
输出
letter1 is:
end.
letter2 is: 3 end.
答案 0 :(得分:2)
格式化的输入运算符会跳过前导空格(除非这样做被显式禁用,例如,使用in >> std::noskipws;
)。未格式化的输入功能不会跳过前导空格。结果,第一次使用std::cin.get(letter1)
会读取换行符,第二次使用会读取输入的数字。
您可以明确跳过前导空格,例如:
if ((std::cin >> std::ws).get(letter1)) {
std::cout << “read ‘“ << letter1 << “‘\n”;
else {
std::cout << “failed to read a character\n”;
}
该示例还添加了一些基本的错误处理:应始终期望输入失败,并且需要适当地处理失败。显然,需要在尝试读取输入后的 中检查失败。