printf imprimindo “D” extra após a chamada de getchar () [duplicado]

Esta pergunta já tem uma resposta aqui:

Por que o programa C imprime 0D em vez de 0? (Quando o EOF é enviado como Ctrl + D) [duplicado] 2 respostas

Estou tentando trabalhar com "A linguagem de programação C" e estou enfrentando alguns problemas com o printf e o caractere EOF. Estou trabalhando no terminal mac e compilando com clang.

Executando 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 eu esperaria, bloqueando até inserir um caractere e depois imprimindo:"*character code*\n10\n", exceto porctrl-d, que imprime "-1"&nbsp;então sai.

Depois de descomentar o"val = 5;"&nbsp;no entanto, digitando "ctrl-d"faz com que seja impresso:"5D".

Eu brinquei com ele e descobri que imprimir val uma segunda vez (a terceira declaração comentada) resultaria em apenasone "D": "5D\n5"e que a impressão de uma constante antes das variáveis (a segunda declaração comentada) impede que o "D" apareça:"hi\n5\n5".

Eu absolutamente não quero o D e se alguém pudesse explicar como removê-lo, ficaria muito grato.