您的位置:首页 > 编程语言 > C语言/C++

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语言
相关文章推荐