我是否缺少 cin.get() 的东西

Am I missing something with cin.get()?

本文关键字:get 是否 cin      更新时间:2023-10-16

我正在学习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.
格式化

的输入运算符跳过前导空格(除非这样做被明确禁用,例如,使用 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 charactern”;
}

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