#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”;
}
В примере также добавлена некоторая базовая обработка ошибок: всегда следует ожидать сбоя ввода, и сбои должны обрабатываться соответствующим образом. Очевидно, что сбои необходимо проверять после попытки прочитать входные данные.