理解缓冲区,字符 I/O和结束键盘输入

简介: 理解缓冲区,字符 I/O和结束键盘输入

文章目录


单字符 I/O :getchar()和putchar()


缓冲区


结束键盘输入


小结:


最初,输入输出函数还不是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;
}

20210708105808834.png


缓冲区



上面的程序为什么这样输出呢,这就要说到缓冲区。

缓冲分为无缓冲和缓冲区两类


无缓冲:回显用户输入的字符后立即重复打印该字符

缓冲区:对于大部分系统在用户按下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呢?


因为getchar()函数返回值通常在0~127之间,也有可能更大扩展字符集,但无论怎样,-1都不对应任何的字符,该值可用于标记文件的结尾


小结:



通过对输入输出的理解,以及缓冲区是什么,为什么要有缓冲区,无缓冲有什么用等心里的疑问统统搞清楚,这样理解计算机设计理解一些接近底层的知识,多我们理解程序,理解规定,查找问题有很大的帮助。


最后学习了结束键盘输入的方法,我们应认真设计用户界面,事先料到程序可能会出现的问题,然后这对这些情况妥善的处理,使得程序有更好的用户体验。🆗



相关文章
|
11月前
单个字符的输入输出
单个字符的输入输出
58 0
|
1月前
从键盘输入一些字符
【7月更文挑战第9天】从键盘输入一些字符。
41 15
|
3月前
|
Python
如何向文件读写一个字符
如何向文件读写一个字符
21 2
|
3月前
|
Python
如何向文件读写字符
如何向文件读写字符
19 0
|
3月前
|
C语言
向文件读写字符
向文件读写字符
25 1
|
3月前
|
C语言
掌握文件读写字符的基本技巧
掌握文件读写字符的基本技巧
22 1
|
3月前
|
C语言
怎样向文件读写字符
怎样向文件读写字符
23 0
|
8月前
C程序需要按下回车键才能读取字符
C程序需要按下回车键才能读取字符
35 0
|
10月前
|
Unix C++ iOS开发
C++如何从键盘输入文件结束符
C++如何从键盘输入文件结束符
缓冲流与打印流(字节与字符)
缓冲流与打印流(字节与字符)
48 0