printf печатает лишние «D» после вызова getchar () [duplicate]

На этот вопрос уже есть ответ здесь:

Почему программа C печатает 0D вместо 0? (Когда EOF отправляется как Ctrl + D) [дубликаты] 2 ответа

Я пытаюсь проработать «Язык программирования C» и сталкиваюсь с некоторыми проблемами с printf и символом EOF. Я работаю в терминале Mac и компилирую с помощью clang.

Запуск этого кода:

#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);
}

работает так, как я ожидал, блокируя до ввода символа, затем печатая:"*character code*\n10\n"кромеctrl-d, который печатает-1" затем выходит.

После раскомментирования"val = 5;" Заявление однако, входяctrl-d"заставляет его печатать:"5D".

Я возился с этим и обнаружил, что печать val во второй раз (третье прокомментированное утверждение) приведет только кone "D": "5D\n5"и что печать константы до того, как переменные (второе закомментированное выражение) не дает появиться букве «D»:"hi\n5\n5".

Я абсолютно не хочу D и если бы кто-нибудь мог объяснить, как его удалить, я был бы очень благодарен.

Ответы на вопрос(1)

Ваш ответ на вопрос