Как работает функция getchar? - C (СИ)

Формулировка задачи:

Здравствуйте. Не совсем понимаю как работает функция getchar. Нашёл такое описание: Функция getchar за одно обращение к ней выдает в качестве результата один символ, поступивший с системного ввода. Возьмём к примеру такую программу, которая подсчитывает количество введённых символов:
#include <stdio.h>
main(){ double cnt = 0.0;
   while (getchar() != EOF) ++cnt;
   printf("%.0f\n", cnt );
}
Всё работает верно. Количество введённых символов выдает верно, то есть как надо, в условии считывается ОДИН символ, затем увеличивается счётчик. А теперь такая программа, которая должна печатать введённые нами символы:
#include <stdio.h>
main()
{
   char c;    
   while((c=getchar())!=EOF) putchar(c);
}
В таком случае программа печатает введённые нами символы только после нажатия Enter. То есть в условие считывается не ОДИН символ, а они считываются пока не нажат Enter. А если изменить код так:
#include <stdio.h>
main()
{
   char c;    
   while(c=getchar()!=EOF) putchar(c);
}
То вместо символов печатаются смайлики. Ничего не могу понять. Помогите разобраться. Правильно ли я понимаю, что getchar считывает ОДИН символ и переходит к следующей строке программы? Если да, то почему во втором случае он ждёт нажатие Enter?

Код к задаче: «Как работает функция getchar? - C (СИ)»

textual
#include<stdio.h>
main()
{
    int c;
    while((c=getchar())!=EOF)
    putchar(c);
}

13   голосов, оценка 3.769 из 5


СОХРАНИТЬ ССЫЛКУ