【问题标题】:CTRL-D on Mac terminal outputs a D characterMac 终端上的 CTRL-D 输出一个 D 字符
【发布时间】:2014-09-10 03:23:25
【问题描述】:

我在 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 是预期的输出,但额外的“D”从何而来?

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

【问题讨论】:

    标签: c macos


    【解决方案1】:

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

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

    【讨论】:

    • 另一方面,我不知道终端在那里打印^D 是否正常。我不记得在其他 Unices 上看到过。
    • @Anand 可以用 \n 开始他们的 printf 格式而不是休眠,以确保输出从新行开始。
    【解决方案2】:

    旧帖子,但我在另一篇帖子中找到了答案,任何新来者都在谷歌上搜索答案。在mac终端输入stty -echoctl

    归功于Jonathan Leffler

    Why does C...上的完整帖子和解释

    【讨论】:

      猜你喜欢
      • 2020-02-20
      • 1970-01-01
      • 2013-03-17
      • 1970-01-01
      • 1970-01-01
      • 2018-10-09
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多