C语言基础:输入缓冲区

六月 6th, 2010, in 程序人生, by None

缓冲定义:暂时存放输入或输出数据的存储区域

实例代码:缓冲输入的实例——延时回显

/* echo.c -- 回显输入 */ #include int main(void) { char ch; while((ch=getchar()) != '#') putchar(ch); return 0; }

程序示例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的结果,大家可以动手试一下。

发表回复

您的 email 地址不会被公开。 必填信息前已经标志为 *

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>