Eu estou tentando entender getchar ()! = EOF

Estou lendo The C Programming Language e entendi tudo até agora. No entanto, quando me deparei com ogetchar() eputchar(), Não consegui entender qual é o seu uso e, mais especificamente, o que o código a seguir faz.

main()
{
    int c;
    while ((c = getchar()) != EOF)
       putchar(c);
}

Eu entendo omain() função, a declaração do inteiroc e awhile loop. Ainda estou confuso sobre a condição dentro dowhile loop. Qual é a entrada neste código C e qual é a saída.

Desculpe se esta é uma pergunta básica e estúpida, mas eu estou apenas procurando por uma explicação simples antes de seguir em frente no livro e ficar mais confuso.

questionAnswers(8)

yourAnswerToTheQuestion