c ubuntu terminal eof getchar

¿Por qué tengo que presionar CTRL+D dos veces para salir de `while((c=getchar())!=EOF)` en Ubuntu 14.10?



terminal (1)

Citando el comentario de @Veritas ,

En Linux, Ctrl-D solo funciona cuando el búfer ya está vacío, de lo contrario solo lo vacía. Por lo tanto, a menos que haya presionado intro sin caracteres después de eso, tendrá que presionar Ctrl-D dos veces.

Esto explica el problema. Tienes que presionarlo dos veces porque, después de tipear Hello , no presionaste Enter para tirar la entrada al stdin . Entonces, la primera vez que presiona CTRL + D , vacía los datos en el stdin . La segunda vez que lo presiona, se envía EOF .

Soy nuevo en C Programming y Ubuntu. Estaba leyendo el "The C Programming Language" de DM Ritchie, donde encontré el siguiente código:

#include <stdio.h> int main() { int c; int nc=0; while((c = getchar()) != EOF) { nc++; } printf("%d Characters /n",nc); return 0; }

Pero al ejecutar el programa, ingreso "Hola", luego CTRL + D dos veces para obtener el número real de caracteres que es 5.

Pero cuando ingreso "Hola" y luego CTRL + D una vez , no pasa nada, el terminal todavía espera la entrada.

¿Por qué?