Я чего-то не понимаю в cin.get()?

#c

#c

Вопрос:

Я изучаю cin.get() C и пытаюсь передать пользователю два символа (включая пробелы).

Во время выполнения кода он неправильно отображает входные данные.

 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.Почему вы делаете оба cin >> letter1 >> letter2; и cin.get(letter1); cin.get(letter2); ?

2. Я забыл упомянуть, что моими намерениями было вывести пробелы.

Ответ №1:

Форматированные операторы ввода пропускают начальные пробелы (если это явно не отключено, например, с помощью 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”;
}
  

В примере также добавлена некоторая базовая обработка ошибок: всегда следует ожидать сбоя ввода, и сбои должны обрабатываться соответствующим образом. Очевидно, что сбои необходимо проверять после попытки прочитать входные данные.