Acabei de começar o livro K&R. Ele introduz um programa de loop getchar() putchar() para copiar caracteres da entrada para a saída até que EOF seja alcançado.
main()
{
int c;
while ((c = getchar()) != EOF)
putchar(c);
}
Tentei mudar para um loop infinito e ver o que acontece quando tento imprimir EOF em vez disso. Aqui está o código:
#include <stdio.h>
int main() {
int c;
while(1) {
c = getchar();
if (c == EOF) {
printf("%d", c); // Since you cannot really use putchar() for EOF as it is -1
// break;
} else {
putchar(c);
}
}
putchar('\n');
return 0;
}
Exemplo de saída:
./a.out
a
a
-1
-1
df
df
-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1
Eu esperava que ele imprimisse -1 e então esperasse pela próxima entrada, mas descobri que ele continua imprimindo -1.
Se eu adicionar uma linha para quebrar o loop depois de imprimir EOF uma vez, ele imprime -1 uma vez e então sai do programa, o que é compreensível.
Mas não entendo por que, sem a instrução break, ele continua em loop e imprime -1.
A princípio, pensei que ele estivesse usando a saída -1 como entrada para o próximo loop (na verdade, os próximos 2 loops, já que -1 são 2 caracteres separados '-' e '1'), mas se for esse o caso, por que não vejo esse comportamento de loop infinito quando coloco qualquer outro caractere como 'a'? Isso deveria ter impresso 'a' continuamente, de acordo com minha lógica anterior.
Alguém pode ajudar a explicar o que está acontecendo?