printf imprime "D" extra después de llamar a getchar () [duplicar]
Esta pregunta ya tiene una respuesta aquí:
¿Por qué el programa C imprime 0D en lugar de 0? (Cuando EOF se envía como Ctrl + D) [duplicado] 2 respuestasEstoy tratando de trabajar con "El lenguaje de programación C", y me encuentro con algunos problemas con printf y el carácter EOF. Estoy trabajando en la terminal de Mac y compilando con clang.
Ejecutando este código:
#include <stdio.h>
main()
{
int val;
while ((val = getchar()) != EOF)
printf("%d\n", val);
/*val = 5;*/
/*printf("hi\n");*/
/*printf("%d\n", val);*/
printf("%d\n", val);
}
funciona como esperaría, bloqueando hasta que ingrese un carácter y luego imprimiendo:"*character code*\n10\n"
, excepto porctrl-d
, que imprime "-1"
luego sale.
Después de descomentar el"val = 5;"
declaración sin embargo, ingresando "ctrl-d
"hace que se imprima:"5D"
.
Me equivoqué con él y descubrí que imprimir val por segunda vez (la tercera declaración comentada) solo dará como resultadoone "D": "5D\n5"
, y que imprimir una constante antes de las variables (la segunda declaración comentada) detiene la aparición de la "D":"hi\n5\n5".
Absolutamente no quiero el D y si alguien pudiera explicar cómo eliminarlo, estaría muy agradecido.