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

时间:2015-06-02 06:12:47

标签: c printf stdio

我正在尝试使用“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,如果有人能解释如何删除它,我将非常感激。

1 个答案:

答案 0 :(得分:1)

那么,会发生什么是控制台输入正在打印您键入的内容。就像你输入字母A一样,字母A被打印出来。 CTRL-D作为^ D打印到标准输出。

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