getchar()!= EOF

我正在从C编程语言书中运行以下程序:

#include  main() { int c; while((c=getchar()) != EOF) putchar(); } 

当我运行这个程序时,我得到一个无法解释的行为。 如果我按以下顺序从命令行输入字符: {'h', 'e', 'l', 'l', 'o', '\n', '^D'}然后我得到以下响应打印到屏幕: hello ,输入\n后,程序退出一次^D输入。

但是,当我按如下方式更改序列时: {'h', 'e', 'l', 'l', 'o', '^D'}然后我将以下响应打印到屏幕上: hello ,但是程序不退出。 一旦我进入^D它不应该退出吗? 我必须第二次输入^D才能退出程序。 或者程序仅在我输入^D后退出\n 。 我不明白为什么当我进入^D时程序不会退出。 有什么想法吗?

我在UNIX系统上运行。

当您键入^ D(’传输结束’)时,刷新输入缓冲区,并将您输入的所有内容发送到您的程序(不实际发送^ D字符)。 它类似于键入换行符,但在这种情况下,也会发送换行符本身。 程序在读取零个字符时将其输入视为已关闭。 当您键入换行符后跟^ D或两个连续^ D时会发生这种情况。