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个字符不会。
我正在尝试解决 "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个字符不会。