¿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é?