我是否缺少cin.get()?

时间:2019-04-07 16:48:35

标签: c++

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

1 个答案:

答案 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”;
}

该示例还添加了一些基本的错误处理:应始终期望输入失败,并且需要适当地处理失败。显然,需要在尝试读取输入后的 中检查失败。