Теория функций getchar () и putchar ()
Я работаю через "язык программирования C" K&R, и пример 1.5 поставил меня в тупик:
#include <stdio.h>
/* copy input to output; 1st version */
int main(int argc, char *argv[])
{
int c;
while ((c = getchar()) != EOF)
putchar(c);
return 0;
}
Я понимаю, что "getchar ()" принимает символ для отображения " putchar ()". Однако, когда я запускаю программу в терминале, почему я могу передать целую строку символов для отображения " putchar ()"?
2 ответов
потому что ваш терминал буферизован. getchar()
и putchar()
по-прежнему работают только с отдельными символами, но терминал ждет с отправкой символов в программу, Пока вы не введете целую строку. Тогда getchar()
получает символ из этого буфера один за другим и putchar()
отображает их один за одним.
дополнение: то, что терминал буферизован линией, означает, что он отправляет входные данные в программу при обнаружении символа новой строки. Это, как правило, больше эффективно отправлять блоки данных вместо одного символа за раз. Он также предлагает пользователю возможность редактировать строку перед нажатием enter.
Примечание: буферизация линии может быть отключена путем отключения канонический режим для терминала, а вызов помощью функций setbuf С NULL
on stdin
.
Да, вы можете писать все, что хотите, пока это не EOF char, клавиатура-специальное устройство ввода-вывода, оно работает непосредственно через BIOS и символы, набранные на клавиатуре, непосредственно вставляются в буфер этот буфер, в вашем случае читается примитивным getchar (), при вводе предложения вы нажимаете данные в буфер, а функция getchar () находится в бесконечном цикле, поэтому это работает.
вы можете задать мне дополнительные вопросы, если вы хотите получить более подробную информацию о том, как работает устройство ввода-вывода.
Ура.