Почему эта программа не печатает по одному символу за раз?

Я просматривал язык программирования C от K&R и наткнулся на этот фрагмент кода:

main()
{
  int c;

  while ((c=getchar()) != EOF)
    putchar(c);
}

Я понимаю, что приведенный выше код не печатает по одному символу за раз сразу после того, как getchar() получает ввод символа из stdin, потому что stdin только отправляет ввод в буфер ввода программы после пользователя попадает Enter.

Однако функция getchar() по-прежнему считывает по одному символу из входного буфера и передает указанный символ putchar() для печати. Почему putchar() не печатает символ сразу после его получения? Он также ждет символа newline перед печатью и сохраняет все в своем собственном буфере?


person Somenath Sinha    schedule 09.02.2016    source источник
comment
Tl;Dr Ваш поток stdout буферизуется строкой, поэтому он не будет печататься сразу. Установите его как небуферизованный или сбросьте его с помощью fflush(stdout) для этого   -  person magisch    schedule 09.02.2016
comment
Посмотрите ЗДЕСЬ   -  person LPs    schedule 09.02.2016
comment
Откуда вы знаете, что putchar не печатает символ сразу после его получения?   -  person user253751    schedule 09.02.2016
comment
@immibis Тогда вывод для abc будет выглядеть как aabbcc, т. е. каждый символ будет напечатан сразу после его получения.   -  person Somenath Sinha    schedule 09.02.2016
comment
@SomenathSinha Но я думал, вы уже установили, что getchar не возвращает никаких символов, пока вы не нажмете ввод. Если getchar все еще ждет, пока вы нажмете Enter, то, очевидно, ваша программа еще не вызывала putchar.   -  person user253751    schedule 09.02.2016
comment
@immibis Это имеет смысл. Спасибо за объяснение.   -  person Somenath Sinha    schedule 09.02.2016