我正在尝试使用“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,如果有人能解释如何删除它,我将非常感激。
答案 0 :(得分:1)
那么,会发生什么是控制台输入正在打印您键入的内容。就像你输入字母A一样,字母A被打印出来。 CTRL-D作为^ D打印到标准输出。
如果您打印出1个字符,^将被覆盖。如果您打印出2个字符,则^和D都会被覆盖。所以,-1会覆盖它,你会覆盖它,但是1个字符不会。