Eu li no livro The C Programming Language de Dennis Ritchie, que int
deve 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, getchar
retorna 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 int
resolve 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 }
.)