《c primer plus》c语言学习笔记整理(八)-字符输入输出和输入验证

本章节内容为所有系统都通用的标准I/O函数,这些函数编写的程序很容易从一个系统移植到另一个系统。处理文件输入及输出也可以用这些函数。
1.单字符I/O:getchar()与putchar()
ANSIC标准发布后,C就把stdio.h头文件与使用getchar()和putchar()相关联,其实getchar()与putchar()都不是真正的函数,他们被定义为供预处理使用的宏。
2.缓冲区
(1)无缓冲(直接)输入:回显用户的输入的字符后立即重复打印该字符(交互式程序-游戏)
(2)缓冲区:用户输入的字符被收集在一个临时存储区,这个存储区被称为缓冲区。
(3)分类:1)完全缓冲I/O:缓冲区被填满才刷新缓冲区(内容被发送至目的地),通常出现在文件输入中(取决于文件系统大小,一般512字节或者4096字节)2)行缓冲:在出现换行符的时候才刷新缓冲区(键盘输入通常是)
3.结束键盘输入
(1)文件、流、键盘输入
1)文件:底层I/O-直接调用操作系统的函数(从较低层面上,c 可以使用主机操作系统的基本文本工具直接处理文件);标准I/O包-较高层面用来处理文件(不同系统储存文件的方式不同,标准I/O包可以不考虑这些差异)
2)流:一个实际输入或输出映射的理想化数据流,不同属性和不同种类的输入,由属性更统一的流来表示,打开文件的过程就是把流与文件相关联,且读写都通过流来完成。(可以用处理文件的方式处理键盘输入,可以使用文件结尾检测器结束键盘输入,C的输入函数内置了文件结尾检测器。)
(2)文件结尾:
1)检测文件末尾的方法,一是文件末尾放一个特殊的字符标记文件结尾(CTRl+Z,UNIX用CTRL+D),二是储存文件大小的信息。(MS-DOS及其相关系统,包括CTRL+Z),c语言用getchar()读取文件检测到文件结尾的时候将返回一个特殊的值,EOF,scanf()函数同样也是如此,为-1,通常EOF定义在stdio.h文件中。
2)绝大部分系统都可以通过键盘模拟文件结尾条件(不是全部)
3)getchar()函数实际返回值的类型是int,所以他可以读取EOF字符
4)putchar()接收的参数就算是整数不会影响,该函数仍然会打印等价的字符。
4.重定向和文件
把stdin流重新赋给文件,继续使用getchar()函数从输入流中获取数据,不关心从流的什么位置获取数据。
(1)重定向输入:文本文件,符号为<,UNIX、Linux和windows命令提示<两侧的空格是可以选择的
(2)重定向输出:>符号
(3)组合重定向:1)重定向运算符连接一个可执行程序(包括标准操作系统命令)和一个数据文件,不能用于连接一个数据文件和另一个数据文件,也不可以用于连接一个程序和另一个程序。2)改运算符不可以读取多个文件输入,同样也不可以吧输出定向为多个文件。
3)>>运算符可以把数据添加到现有文件的末尾,而| 运算符可以把一个文件的输出连接到另一个文件的输入。(UNIX、Linux、Windows/Dos, UNIX相关书籍,UNIXPrimerpus)
5.如何创建更加友好的用户界面
(1)具体思路:1)输入验证 2)根据实际情况可增加菜单浏览 3)使的执行更加顺利,需要为输入过程提供一个只返回正确响应的函数(处理正确输入与错误输入时都能顺利运行)4)处理混合字符与数值输入
(2)换行符的处理:缓冲输入要求用户按下Enter键发送输入。这一个动作也传送了换行符。必须处理这个换行符。
(3)混合数值与字符输入:1)记得处理scanf()函数留在队列中的换行符 2)如果scanf()函数没有成功读取,就会将该元素留在输入队列中。3)包含stdbool.h头文件,可以使用bool值
(4)使用独立函数(模块)验证输入和管理显示。程序越大,使用模块化编程就越重要
(5)输入由字符组成,但是scanf()函数可以把输入转换成整数值或浮点数值。使用转换说明(%d或%f)限制了可接受输入的字符类型。

你可能感兴趣的:(C语言)