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

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

#include  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’来自哪里?

我看到了这个线程和这个常见问题 ,但找不到答案。

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

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