Здравствуйте, динамо!
Приведённый Вами пример является классической демонстрацией работы с потоком ввода stdout в UNIX-системах. В Вашем примере в цикле while переменной int c присваивается вывод функции int getchar(void);
getchar - это макрокоманда, вводящая символ из потока stdin. Она определена следующим образом: getc(stdin). При успешном завершении функция getchar возвращает считанный символ после предварительного преобразования его в целое без расширения знака. При возникновении ситуации EOF или при ошибке она возвращает EOF. Функция поддерживается на системах UNIX, описана Керниганом и Ритчи. Поддерживается стандартом ANSI C.
В случае, если вводимый символ оказывается символом конца строки ("\n"), т.е., если пользователь просто нажал ENTER, переменная int nl, выполняющая роль счётчика, префиксно инкрементируется (увеличивается на 1); тем самым производится подсчёт введённых строк. В случае, если введённым символом оказывается EOF, то программа завершает цикл while и выводит значение nl. Символом EOF в Linux является CTRL+D, т.е. для завершения работы программы необходимо нажать клавиши Control и D.
Вывод несколько модифицированной Вашей программы (см. приложение) показан на рисунке:
Приложение:
#include <stdio.h>
//---------------------------------------------------------
int main()
{
int c, nl;
nl = 0;
while ((c = getchar()) != EOF)
{
if (c == '\n')
{
++nl;
}
}
printf("Введено строк: %d\n", nl);
return 0;
}