¿Por qué no puedo encontrar el valor de EOF en C?

Estoy leyendo el libro “El lenguaje de progtwigción C” y hay un ejercicio que me pide que verifique que la expresión getchar() != EOF está devolviendo 1 o 0. Ahora el código original antes de que me pidieran que hiciera eso era:

 int main() { int c; c = getchar(); while (c != EOF) { putchar(c); c = getchar(); } } 

Así que pensé en cambiarlo a:

 int main() { int c; c = getchar(); while (c != EOF) { printf("the value of EOF is: %d", c); printf(", and the char you typed was: "); putchar(c); c = getchar(); } } 

Y la respuesta en el libro es:

 int main() { printf("Press a key\n\n"); printf("The expression getchar() != EOF evaluates to %d\n", getchar() != EOF); } 

¿Podría por favor explicarme por qué mi camino no funcionó?

Porque si c es EOF , el bucle while termina (o ni siquiera se iniciará, si ya está EOF en el primer carácter escrito). La condición para ejecutar otra iteración del bucle es que c NO EOF .

Para mostrar el valor de EOF

 #include  int main() { printf("EOF on my system is %d\n", EOF); return 0; } 

EOF se define en stdio.h normalmente como -1

EOF se puede activar a través del teclado presionando las teclas ctrl + d en Unix y ctrl + c en Windows.

Código de muestra:

  void main() { printf(" value of getchar() != eof is %d ",(getchar() != EOF)); printf("value of eof %d", EOF); } 

Salida:

 [root@aricent prac]# ./a.out a value of getchar() != eof is 1 value of eof -1 [root@aricent prac]# ./a.out Press ctrl+d value of getchar() != eof is 0 value of eof -1[root@aricent prac]# 
 Here is my one, i went through the same problem and same answer but i finally found what every body want to say. System specification :: Ubuntu 14.04 lts Software :: gcc yes the value of EOF is -1 based on this statement printf("%i",EOF); but if your code contain like this statement while((char c=getchar)!=EOF);; and you are trying to end this loop using -1 value, it could not work. But instead of -1 you press Ctrl+D your while loop will terminate and you will get your output. 

que sea c! = EOF en su lugar. Porque quieres imprimir el resultado de la expresión y no el carácter.

en su progtwig está leyendo el carácter de la entrada estándar como c = getchar ();

De esta manera puede obtener un valor ASCII de la tecla presionada, que nunca será igual a EOF.

porque EOF es Fin de Archivo.

es mejor que intentes abrir cualquier archivo existente y leerlo, de modo que cuando llegue al final del archivo (EOF), cerrará el ciclo while.

Bueno, la respuesta en el libro es:

 int main() { printf("Press a key\n\n"); printf("The expression getchar() != EOF evaluates to %d\n", getchar() != EOF); } 

trate de entender el progtwig, obtiene una clave, que no será igual a EOF, por lo que siempre debe imprimir “La expresión getchar ()! = EOF se evalúa como 0”.

Espero eso ayude…….