printf打印额外的“D”后getchar()调用

我正在尝试通过“C编程语言”,我遇到了一些关于printf和EOF角色的问题。 我正在使用mac终端并使用clang进行编译。

运行此代码:

#include  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覆盖它,你会覆盖它,但是1个字符不会。