ctrl-d no detuvo el tiempo (getchar ()! = EOF) loop

Aquí está mi código. Lo ejecuto en ubuntu con terminal. cuando escribo (una Ctrl D ) en la terminal, el progtwig no se detuvo, sino que continuó esperando mi entrada.

¿No es Ctrl D igual a EOF en Unix?

Gracias.

#include main() { int d; while(d=getchar()!=EOF) { printf("\"getchar()!=EOF\" result is %d\n", d); printf("EOF:%d\n", EOF); } printf("\"getchar()!=EOF\" result is %d\n", d); } 

EOF no es un personaje. El EOF es una macro que getchar() devuelve cuando llega al final de la entrada o encuentra algún tipo de error. El ^D no es “un personaje EOF”. Lo que sucede en Linux cuando toca ^ D en una línea es que cierra la secuencia, y la llamada getchar() llega al final de la entrada y devuelve la macro EOF . Si escribe ^D en algún lugar en el medio de una línea, la transmisión no se cierra, por lo que getchar() devuelve valores que lee y su bucle no sale.

Vea la sección stdio de C faq para una mejor descripción.

Adicionalmente:

En sistemas modernos, no refleja ningún carácter real de fin de archivo almacenado en un archivo; es una señal de que no hay más personajes disponibles.

Además de la respuesta de Jon Lin sobre EOF, no estoy seguro de que el código que escribió sea el que pretendía. Si desea ver el valor devuelto por getchar en la variable d , debe cambiar su statement while a:

  while((d=getchar())!=EOF) { 

Esto se debe a que el operador de desigualdad tiene mayor prioridad que la asignación. Entonces, en su código, d siempre sería 0 o 1 .