En el libro sistema Linux Programación He leído algunos como este:fgetc, comprobando EOF
fgetc
devuelve el carácter leído como un elencounsigned char
a unint
oEOF
el final del archivo o error. Un error común es el uso defgetc
:char c; if ((c = fgetc()) != EOF) {...}
la versión correcta de este código es:
int c; if ((c = fgetc()) != EOF) { printf("%c", (char)c); ... }
Así que, por qué no puedo emitir un valor de retorno a char
antes de comparar con EOF
? ¿Por qué tengo que comparar EOF
exactamente con int
? Como EOF
se definió como -1
, ¿normalmente no se convierte en char
?
¿Hay plataformas/compiladores donde no es cierto?
posible duplicado de ["while (! Feof (archivo))" siempre es incorrecto] (http://stackoverflow.com/questions/5431941/while-feof-file-is-always-wrong) – jww
@jww: esta pregunta no usa 'feof()' por lo que no es un duplicado de "[' while (! feof (archivo)) 'siempre está equivocado] (http://stackoverflow.com/questions/5431941/while-feof- file-is-always-wrong) ". –