std::cin
- это объект потока, представляющий stdin
или стандартный поток ввода. Оператор >>
(я назову его «оператор извлечения») извлекает символы из потока и записывает в переменную. С std::cin
он будет пытаться извлечь то, что ему нужно, из того, что уже находится в потоке, но если он исчерпает их, он будет ждать ввода данных от консоли.
На самом деле, если вы запускаете эту программу из оболочки bash, вы можете сказать программе читать stdin
из файла:
./a.out < input_file.txt
Все ваши операторы std::cin >> ...
будут "пропущены", так как ты говоришь. На самом деле происходит чтение следующего значения из потока (которое в данном случае является содержимым input_file.txt) без ожидания ввода пользователя.
С тех пор, как std::cin
ожидает ввода пользователя, он сохранит читая ввод до тех пор, пока вы не нажмете ввод, вы можете ввести больше символов, чем ищет непосредственный оператор std::cin >>
Это то, что здесь происходит.