//下面仅为个人理解
目录
1.用C程序处理输入/输出
(1)流程
处理文件内容→处理文件结尾
(2)流程解读
1.处理文件内容
从概念上看,C通过把文件”这一包含多种属性的输入“转化为属性统一的流来处理文件,于是,打开文件的过程就是把流与文件相关联,并且程序的读写都通过流来完成。(流是一个实际输出或输入映射的理想化数据流)。
2.处理文件结尾
必要性
C程序需要通过处理文件结尾来结束文件输入或输出
方式
a.储存文件大小的信息
举例:比如说C程序要读取一个内含300字符的文件,那么在读取300个文件中的字符后就会停止读取。
好处:这种方式不需要避讳特殊字符。UNIX用这种方法处理所有文件。
b.用特殊字符标记(ctrl+D或者ctrl+Z)
描述:在待读取的输入内做出特殊标记ctrl+D或者ctrl+Z后,等到getchar()读取到这个特殊字符,会返回一个特殊的值EOF(EOF的值为-1,原因是所有字符的对应值都不为-1,并且需要注意的是EOF只是一个值,标志着文件结束,并不是在输入中可以找到的符号)
(3)缓冲区
介绍
在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。
分类
完全缓冲I/O与与行缓冲I/O。完全缓冲输入指的是当缓冲区被填满时才能刷新缓冲区,通常出现在文件输入中。行缓冲指的是出现换行符时刷新缓冲区,通常出现在键盘输入中。
有缓冲区与无缓冲的区别
无缓冲执行速度更快。有缓冲区时方便修改错误,因为输入的内容并不会直接执行。
(4)重定向
1.分类
重定向输入(运算符为<)与重定向输出(运算符为>)。
2.理解
重定向输入就是把文件的内容输入到指定的程序中,重定向输出就是把程序运行的结果输出到指定的文件中。
3.用法
(不同的操作系统有不同,这是Windows的用法)编写源代码→生成可执行文件→将生成的exe文件转移到Windows命令行指定的文件夹里→启用命令行进行重定向
以我的Windows举例:(把exe文件转移到第三行的文件中,然后进行重定向)
4.重定向的书写格式
一些操作系统要求重定向运算符左侧留有一个空格(比如说A.exe <B.txt),但对于UNIX,Linux,Windows命令提示,重定向运算符两侧的空格是可选项(就是可有可无)。
5.组合重定向
组合重定向时都是对第一个程序或者文件而言的(比如说重定向A<B>C<D,其中的B,C,D都是与A相关联的,不过执行顺序是依次的)
2.输入验证
(1)目的
提醒并帮助纠正用户的错误输入,给用户以友好的体验。
(2)用户输入出错的类型
a.用户输入同一类但不同类型的数据(比如说程序要求用户输入1~10任意一个数字,而用户却输入了-4)
b.用户输入了不同类型的数据(比如说程序要求用户输入最喜欢的一个动物,用户却输入了一个4)
(3)用户输入出错的的解决方法
用户输入同一类但不同类型的数据时,可以通过关系表达式来排除这种情况,就是说用循环或者条件选择语句来引导用户正确输入
用户输入了不同类型的数据时,可以通过用scanf()函数成功读取的数据个数来排除这种情况。
3.零碎知识
1.scanf返回值为成功读取的项的个数
2.EOF是一个值,不是在文件中找得到的符号
用在 程序<文件 的重定向情况下
3.如果用不了重定向,可以用程序直接打开文件。(步骤请看225页)
4.ANSI C把缓冲输入作为标准
5.文件是存储器中储存信息的区域,通常保存在永久存储器中。