Eu li no livro The C Programming Language de Dennis Ritchie, que intdeve ser usado para uma variável conter EOF - para torná-la suficientemente grande para que possa manter o valor EOF - não char. Mas o código a seguir funciona bem:
#include<stdio.h>
main() {
char c;
c=getchar();
while(c!=EOF) {
putchar(c);
c=getchar();
}
}
Quando não houver mais entrada, getcharretorna EOF. E no programa acima, a variável c, com o tipo char, é capaz de segurá-la com sucesso.
Por que isso funciona? Conforme a explicação no livro acima mencionado, o código não deve funcionar.
0xff. Armazenar o resultado de getchar()em um intresolve esse problema. Sua pergunta é essencialmente a mesma que a pergunta 12.1 na FAQ do comp.lang.c , que é um excelente recurso. (Além disso, main()deve ser int main(void), e não faria mal para adicionar um return 0;antes do fechamento }.)