Vaciar buffer de entrada

Considere el siguiente código:

#include int main(){ char c; while( ( c=getchar() ) != EOF ) printf("%c\n",c); return 0; } 

Di la entrada como: hola ^ Z

La salida fue:

 h i (an arrow pointing towards left) 

[Lo siento, no pude encontrar el carácter de la flecha de arriba. ]

¿Alguien puede explicar la salida? Dado que ^ Z es parte de la cadena de caracteres y hay caracteres para vaciar, creo que ^ Z no debería haberse pasado y, por lo tanto, la salida debería ser,

 h i (new line ) 

PD: Estoy en Windows y ^ Z es EOF.

El problema aquí es que un char no es suficiente para mantener un valor de EOF . Necesitas hacer uso de un tipo int .

Cambia el char c; a int c; .

Dicho esto, el getchar() devolverá cualquier elemento pendiente en la entrada estándar. Si usa la combinación de teclas después de alguna entrada, la acción sería similar a vaciar el flujo. Para obtener el EOF devuelto desde getchar() , debe presionar la combinación de teclas una vez más.

En resumen, si espera que getchar() devuelva EOF en CTRL + Z, asegúrese de que no haya nada en stdin .

Dicho esto, para un entorno alojado, la firma adecuada de main() es int main(void) , al menos.

Consulte http://www.cplusplus.com/reference/cstdio/getchar/ Se dice que el tipo de getchar de getchar es int . El comstackdor debería haber dado aviso. Por favor, no ignore tales advertencias.

Usted está asignando int a char que resultará en pérdida. Intenta int en int e imprimirlo.

También puede imprimir int en printf usando %c y typecasting to char .