Сначала я был бы признателен за то, что вы задали такой хороший вопрос, о котором большинство программистов даже не задумываются. В этой статье я постарался решить эту проблему наилучшим образом.
Очередь: следует за принципом «первым пришел - первым вышел». Принцип подобен приоритету, которому следуют, в то время как очередь людей, ждущих, чтобы купить новые iPhone.
Входной поток ведет себя как очередь. Считайте это Скуби Ду. Даже того, что Он съел, достаточно для того дня, когда он не перестанет есть. Если кто-то предлагает две тонны еды на завтрак, Скуби съедает весь завтрак и все равно просит обед.
Входной поток похож на Scooby Doo. Посмотри этот код!
char c=getchar();
Здесь достаточно одного символа для c, но когда вы запускаете этот код. Вы можете набирать в консоли столько символов, сколько вы хотите, но независимо от того, что вы нажимаете, введите ваш ввод: c назначит первый набранный вами символ.
Но обратите внимание, что проверка EOF - плохая практика, потому что по многим причинам я перечислю причины в конце.
Приходя к вашему Вопросу! Почему персонаж не печатается один за другим?
Изучение самого потока - большая область. Так что просто для вашего удобства подумайте, что у входного потока будет какой-то скрытый файл (очередь) для хранения любого введенного вами символа.
Печатание персонажа в потоке похоже на стрельбу из пулемета непрерывно. Нет никакой возможности подождать, пока пулемет перестанет стрелять, чтобы выполнить контратаку.
Аналогично, пока вы печатаете символ в потоке, файл просто вставит в него каждый символ. После того, как вы ввели команду enter или EOF 'Cntl + D'.
Тогда ваш код будет заглядывать в файл символ за символом (запомните основной IN первым). Если условие удовлетворяется, оно прекращает выполнение там и не заботится о следующих оставшихся символах в файле.
В вашем случае он будет искать все символы в файле после ввода пользователем команды enter или EOF и меняет их регистры (с верхнего на нижний и наоборот)
Как я и обещал!
Почему не стоит проверять EOF!
Одной из причин является то, что нажатие клавиши создает условие конца файла из
Клавиатура не является стандартной, но отличается между платформами.
Другая причина заключается в том, что завершение программы лучше всего делать более явно
(например, с помощью команды «выйти»).
Третья причина заключается в том, что могут возникнуть другие условия ошибки, и эта проверка не обнаружит их.
Так что постарайтесь избежать этого.