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时会发生这种情况。