В этой программе вводятся две переменные (на этот раз в виде отдельных операторов). Мы запустим эту программу дважды.
Запуск #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, поскольку в буфере ввода уже был предыдущий ввод, который мог быть использован.
Ключевой момент
std::cin является буферизованным, потому что он позволяет нам отделить ввод данных от их извлечения. Мы можем ввести данные один раз, а затем выполнить несколько запросов на их извлечение.