printf 在 getchar() 调用后打印额外的 "D"

printf printing extra "D" after getchar() call

我正在尝试解决 "The C Programming Language",并且我 运行 遇到了 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,如果有人能解释如何删除它,我将不胜感激。

所以,控制台输入正在打印您键入的内容。就像您键入字母 A 一样,字母 A 会被打印出来。 CTRL-D 作为 ^D.

打印到标准输出

如果打印出 1 个字符,^ 将被覆盖。如果打印出 2 个字符,则 ^ 和 D 都会被覆盖。所以,-1覆盖它,hi覆盖它,但是1个字符不会。