Mac终端上的CTRL-D输出D字符

时间:2014-09-10 03:23:25

标签: c macos

我在mac OS X机器终端上运行这个例子(来自Kernighan和Ritchie的C书第1.5.2节):

#include <stdio.h>

int main()
{
    int c, nl;

    nl = 0;
    while((c = getchar()) != EOF)
        if(c == '\n')
            ++nl;

    printf("%d\n", nl);
}

我运行应用程序并立即输入EOF字符CTRL-D。该程序输出0D并终止。 0是预期的输出,但额外的&#39; D&#39;来自?

我看到了this threadthis faq,但找不到答案。

2 个答案:

答案 0 :(得分:7)

我打赌终端显示^D(正常的插入符号)并将光标留在插入符号上,然后您的程序正在打印0\n,因为nl是0覆盖插入符号。

在最终sleep(5)之前添加printf应该确认这一点。

答案 1 :(得分:0)

旧帖子,但我在另一篇帖子中找到了答案,对于任何新手,谷歌搜索了答案。在Mac终端stty -echoctl

中输入

贷方转到Jonathan Leffler

关于Why does C...

的完整帖子和说明