记录一下关于getchar()函数的一些感悟。

int main()
{
	int c;

	while ((c=getchar()) != EOF)
		putchar(c);
	return 0;
}

这个经典的小程序,可以实现Linux程序echo的功能。我想讲的是,如果你 从键盘中输入123EOF (Ctrl_D),程序会打印出123但并不会立即退出,而是需要再输入一个 EOF (Ctrl_D)才可以退出。即:

	123EOF123EOF
	<process quit>

这是因为getchar并不是从键盘文件中读一个字符就立即将这个字符返回,而是将它存在 一个缓冲区中,当getchar收到第一个EOF的时候,将缓冲区中的内容全部返回。如果缓冲区 为空,则将返回一个EOF

所以,当我们输入123EOF的时候,getchar实际上返回的是已经读取的123;当我们输入第二个 EOF的时候,缓冲区中没有数据,所以getchar会返回一个EOF,程序退出。

补充,实验表明,当getchar接收到回车的时候,也会将读取到的信息(含有收到的回车)一并返回, 因此:

	123(Enter)    # 用户输入
	123(Enter)    # 程序输出

以上。