Как программа получает ввод?
Здесь нет ни putchar(), ни scanf(), ни тому подобного. 
есть c = getchar().

ОТКУДА программа получает ввод?
из стандартного потока ввода, откуда getchar читает символы.
for (i = 0; i < lim-1 && (c = getchar()) != EOF && c != '\n'; ++i)
Тут. В цикле идёт считывание текущего символа до тех пор, пока не будет получен EOL или не произойдёт нажатие Enter. Ну или длина строки не превысит заданное значение.