c语言缓冲输入和非缓冲输入的分析(stdin和stdout流的应用,getchar,getch的区别)
2014-03-16 01:36
447 查看
一、缓冲输入和非缓冲输入的实例
1.1、缓冲输入实例
1.2、非缓冲输入实例
效果:按下一个字符,控制台屏幕就显示该字符。当按下‘#’字符时候,则提示press any key to continue.
二、缓冲输入和非缓冲输入分析
1、程序分析
getchar()函数的原型为 int getchar(void); 函数功能:从stdin流中读一个字符/一个字节。putchar()函数的原型为 int putchar(int ch); 函数功能: 从stdout流上输出一个字符/一个字节。
当我们输入 HI! #hello,world,按下Enter(回车键)时候,屏幕上会一次性显示一个字符串“HI !”。这时候可能就会产生一个疑问。"getchar()每次只读取一个字符,为什么这里会显示一个字符串?同时,为什么我输入一个字符后,没有立刻在屏幕上回显该字符?"
原因:使用getchar()函数获取按键字符,表示您选用了缓冲输入类型。您所键入的字符被收集并存储在一个被称为缓冲区(buffer)的临时存储区域中。按下回车键后,您所建入的字符会映射到stdin(输入流),从而被C程序处理,此时表现为字符快对程序可用。即执行while循环,不停调用putchar(ch),知道遇到'#'为止。
2、缓冲输入与非缓冲输入模型
流程图分析
2.1、概念
缓冲输入:文件缓冲输入通常表现为延迟回显。即您所键入的字符被收集并存储在一个被称为缓冲区的(buffer)的临时存储区域中。按下回车键则可使您所键入的字符快对程序可用。非缓冲输入:输入字符立即回显。即该内容对程序立即可用。
2.2、需求
需要缓冲输入的原因:(1)讲若干个字符作为一个快传输比逐个发送这些字符耗费的时间少。
(2)如果您输入有误,就可以使用您的键盘更正功能来修正错误。当最终按下回车键的时候,您就可以发送正确的输入。
需要非缓冲输入的原因:
一些交互性的程序需要非缓冲输入。例如,在游戏中,你需要一按下键就执行某种命令。此时,通常会用到getch()函数来获取按键的ascii,从而实现按键响应响应的操作。
三、C程序处理输入输出的流程图分析
流程图分析
从概念上来说,C程序处理一个流而不是直接处理文件。流(stream)是一个理想化的数据流,实际输入或者输出映射到这个数据流。这意味着具有不同属性的多种类型的输入由流表示,会具有更多统一的属性。于是打开文件的过程就成为将流与文件相关联,并通过流进行读写的过程。
相关文章推荐
- C#词法分析器之输入缓冲和代码定位的应用分析
- Linux下getchar()输入缓冲区stdin问题分析与处理
- C#词法分析器之输入缓冲和代码定位的应用分析(二)
- C语言专题——getchar()与getch()的区别
- ogre中缓冲(buffered)输入方式和非缓冲(unbuffered)输入有什么区别?
- C 语言中getch()、getche()和getchar()函数之间的区别以及缓冲区的概念
- getch(),getche(),getchar()的区别
- getchar()和getch()的区别
- 浅谈scanf,getchar,gets分别输入字符串有什么区别
- C语言笔记-getch\getche\getchar的区别
- getch(),getche(),getchar()的区别
- getch getche getchar的区别和缓冲区的概念
- C++中几个输入函数的用法和区别(cin、cin.get()、cin.getline()、getline()、gets()、getchar()))
- scanf(“%s",)与gets()输入字符串的区别,以及与getchar()吸收回车键的搭配
- 二叉树的应用——表达式树的原理分析与实现(Java语言)
- C语言学习7 :二级指针定义,强制转换,多级指针初步,6级指针构造,错误应用*p=&a,错误应用 二级p2,void型指针的兼容性,malloc函数基本用法,malloc分配空间和堆栈空间的区别,验证malloc函数内存的分配,验证malloc函数的越界,内存泄漏,指针不能返回局部变量地址,内存分配
- getch 和 getchar 在 windows 和 unix下的区别
- getchar和getch的区别,gets和scanf("%s",&k)的区别
- C语言getch(),getchar(),getche()区别实例
- getch(),getche(),getchar()的区别