理解缓冲区,字符 I/O和结束键盘输入
最初,输入输出函数还不是C语言定义的一部分,后来UNIX系统中的C实现为这些函数提供了一个模型。ANSI C 库吸取其成功的经验,咳咳,我们来学习所有系统通用的标准 I/O 函数
单字符 I/O :getchar()和putchar()
其实他俩都不是真正的函数,它们被定义为供预处理器使用的宏(后面深入探讨)
#include <stdio.h>
int main(void){
char a;
while ((a=getchar())!='&')
putchar(a);
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
缓冲区
上面的程序为什么这样输出呢,这就要说到缓冲区。
缓冲分为无缓冲
和缓冲区
两类
无缓冲
:回显用户输入的字符后立即重复打印该字符
缓冲区
:对于大部分系统在用户按下enter键之前不会重复打印刚输入的字符(一个临时存储区)
为什么要有缓冲区?
- 把若干字符作为一个块进行传输比逐个发送这些字符节约时间。
- 如果打错字,可以通过键盘直接修改,最后按下enter键,正确输入。
缓冲输入和无缓冲都是必要的
- 某些交互式程序需要无缓冲输入。比如,游戏中,你希望按一下键就执行相应的指令,响应速度快,要不还玩个毛。
缓冲分为两类
- 完全缓冲输入输出:指的是当缓冲区被填满时才刷新缓冲区(内容发送到目的地)
- 行缓冲输入输出:指的是在出现换行符时刷新缓冲区,键盘输入通常是行缓冲输入,所以在按下enter后才刷新缓冲区
ANSI C和后续的C标准都规定输入是缓冲的
- 一些计算机不允许无缓冲输入,你说你的计算机允许无缓冲输入,🆗,C很贴心,你可以通过 conio.h 头文件引入一系列特殊的函数
- 这些函数包括回显无缓冲输入的grtche()函数和无回显无缓冲输入的getch()函数
- 回显输入意味着用户输入的字符直接显示在屏幕上,无回显输入意味着击键后对应的字符不显示
结束键盘输入
像之前的程序,我用&来结束程序,可是&符号避免不了要用到,那么C也提供了这样的字符
文件,流和键盘输入
文件(file)是存储器中存储信息的区域。通常,文件都保存在某种永久存储器中(硬盘,U盘,数字多功能光盘等),由此可见它的重要性
C是一门强大,灵活的语言,有许多用于打开,读取,写入和关闭文件的库函数
概念上,C程序处理的是流而不是直接处理文件,流是一种实际输入和输出映射的理想数据化流。这就意味着不同属性和不同种类的输入,由属性更统一的流来表示,于是,打开文件的过程就是把流与文件相关联·,而且读写都通过流来完成,stdin流表示键盘输入,stdout流表示屏幕输出
文件结尾
计算机操作系统要以某种方式判断文件的开始和结束。
检测文件结尾的一种方法是,在文件的末尾放一个特殊字符标记文件的结束。这些系统可以使用内嵌的ctrl+z字符来标记文件结尾,这曾是操作系统使用的唯一标记。
操作系统使用的另一个防方法是储存文件大小的信息。新版的DOS也使用这种方法处理文本文件,UNIX使用这种方法处理所有文件。
在C中,EOF(end of file)是检测到文件结尾后返回的值,它定义在stdio.h的头文件中。
#define EOF (-1)
- 1
看到头文件里为啥子定义为-1呢?
- 因为getchar()函数返回值通常在0~127之间,也有可能更大扩展字符集,但无论怎样,-1都不对应任何的字符,该值可用于标记文件的结尾
小结:
通过对输入输出的理解,以及缓冲区是什么,为什么要有缓冲区,无缓冲有什么用等心里的疑问统统搞清楚,这样理解计算机设计理解一些接近底层的知识,多我们理解程序,理解规定,查找问题有很大的帮助。最后学习了结束键盘输入的方法,我们应认真设计用户界面,事先料到程序可能会出现的问题,然后这对这些情况妥善的处理,使得程序有更好的用户体验。🆗
陨石坠落的速度是每秒十千米,我该用怎么样的速度,才能将你拯救。
文章来源: blog.csdn.net,作者:周棋洛ყ ᥱ ᥉,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/m0_53321320/article/details/118568774
- 点赞
- 收藏
- 关注作者
评论(0)