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 respuestas

Estoy 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.

Respuestas a la pregunta(1)

Su respuesta a la pregunta