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 respostasEstou 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"
então sai.
Depois de descomentar o"val = 5;"
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.