Статья Автор: Деникина Н.В., Деникин А.В.

* Буфферизация std::cin

В предыдущем разделе мы отметили, что вывод данных на самом деле представляет собой двухэтапный процесс:
  • данные из каждого запроса на вывод добавляются (в конец) буфера вывода.
  • Позже данные из буфера вывода (передней части) передаются на устройство вывода (консоль).
 

Ввод данных также состоит из двух этапов:

  • отдельные символы, которые вы вводите в качестве входных данных, добавляются в конец буфера ввода (внутри std::cin). Клавиша ввода (нажатая для отправки данных) также сохраняется как символ '\n'.
  • Оператор извлечения '>>' удаляет символы из начала буфера ввода и преобразует их в значение, которое присваивается связанной переменной. Затем эта переменная может быть использована в последующих операторах.

Мы продемонстрируем это на примере следующей программы:



В этой программе вводятся две переменные (на этот раз в виде отдельных операторов). Мы запустим эту программу дважды.

Запуск #1: Когда встретится std::cin >> x; программа будет ждать ввода. Введите значение 4 и нажмите Enter. Ввод 4\n попадает в буфер ввода, а значение 4 извлекается в переменную x.

Когда встретится std::cin >> y;, программа снова будет ждать ввода. Введите значение 5 и нажмите Enter. Ввод 5\n попадает в буфер ввода, а значение 5 извлекается в переменную y. Наконец, программа выведет You entered 4 and 5.

Запуск #2: Когда встречается std::cin >> x программа ждет ввода. Введите 4 5 и нажмите Enter. Ввод 4 5\n поступает в буфер ввода, но только 4 извлекается в переменную x (извлечение останавливается на пробеле).

Когда встречается std::cin >> y  программа не будет ждать ввода. Вместо этого 5, которая все еще находится в буфере ввода, извлекается в переменную y. Затем программа печатает You entered 4 and 5.

Обратите внимание, что в "Запуске #2" программа не ждала, пока пользователь введет дополнительный ввод при извлечении в переменную y, поскольку в буфере ввода уже был предыдущий ввод, который мог быть использован.

Пропустить Навигационные Ссылки.
Чтобы оставить комментарий нужна авторизация
Печать