(Postando conforme solicitado pelo Coelho...)
Ao redirecionar a entrada para um arquivo usando "<", a função scanf retorna EOF (geralmente -1) quando o arquivo termina, e não altera o valor contido nos endereços recebidos.
Exemplo:
#include <stdio.h>
int main ()
{
int valorRetornado, i;
char c;
for (i = 0; i < 10; i++) {
valorRetornado = scanf ("%c", &c);
printf (" i = %d valorRetornado = %d c = '%c' (%d)\n", i, valorRetornado, c, c);
}
return 0;
}
Arquivo de entrada anexo. (O arquivo termina com duas quebras de linha, as quais não são exibidas por todos os editores de texto.)
Para testar:
./nome-do-programa < entrada.txt
Isso significa que não podemos simplesmente utilizar um arquivo como "começo" da entrada e continuar a execução utilizando entradas do teclado sem o devido tratamento desse valor de retorno.