缓冲定义:暂时存放输入或输出数据的存储区域
实例代码:缓冲输入的实例——延时回显
/* echo.c -- 回显输入 */
#include
程序示例1:
hello,welcome to magicalboy.com【回车】
hello,welcome to magicalboy.com
you are always the #1!【回车】
you are always the
程序示例2:
hheelloo,,wweellccoommee ttoo mmaaggiiccaallbbooyy..ccoomm【回车】
yyoouu aarree aallwwaayyss tthhee #
程序分析
输入的字符被临时存储在缓冲区中,直到按下回车键,所缓冲的字符才变得可用,同时,缓冲区被清空。
为什么需要缓冲区
- 提高数据传输效率,将若干个字符作为一个块传输比逐个发送这些字符耗费的时间少。
- 及时修改数据,如果输入有误,可以及时更正,直到按下回车键发送正确的输入。
缓冲的分类
- 完全缓冲 I/O:缓冲区满时被清空,即缓冲区数据被发送到目的地。此类缓冲通常用在文件输入中。缓冲区的大小取决于系统,常见的值有512字节和4096字节。
- 行缓冲 I/O:这种就是前面例子演示的缓冲,当遇到一个换行字符或按下回车键时将被清空缓冲区,键盘输入是标准的行缓冲。
非缓冲输入
直接输入,表示输入的数据对程序马上可用,例如,前面的程序运行示例2中,我们在命令行输入的字符马上回显。再如游戏中的输入,按下一个键马上执行某一个命令。
结束语
ANSI C规定应该对输入进行缓冲,但K&R则将选择权留给了编译器的实现。运行上面的程序,大多数系统都能看到如程序示例1的结果,大家可以动手试一下。

