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 и если бы кто-нибудь мог объяснить, как его удалить, я был бы очень благодарен.