我们之前写程序,得到运行结果,退出运行,运行结果就不见了,因为运行的结果放到了内存中,退出程序的时候数据就会消失,等下一次运行又要重新输入数据,这样就显得很麻烦。
那么我们如何保存之前的运行结果呢
将运行的结果放到磁盘中,然后我们的运行结果就会保存,我们下一次运行程序,如果要使用之前的结果,将磁盘的数据读取到程序中,这样就使得程序更加持久。这样的操作就是叫文件操作
文件的打开和关闭
文件指针
每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名字,文件的状态及文件的当前位置等)。这些信息是保存在一个结构体变量中的,这个结构体类型是有系统声明的,取名FILE
我们每打开一个文件的时候,系统会根据文件的情况自动创建一个FILE结构变量,并且补充信息,使用不必关心细节。
一般都是通过一个FILE的指针来维护这个FILE结构的变量,这样使用起来更加方便。
FILE指针变量的创建
定义pf是一个指向FILE类型数据的指针变量。pf指向文件信息区,通过pf来访问文件信息区内容,然后就可以访问文件内容了。也就是说通过文件指针变量能够找到与它相关联的文件。
文件的打开和关闭
文件在读写之前需要打开文件,在使用结束之后应该关闭文件。
在编写程序的时候,在打开文件的同时,都会返回一个FILE*的指针变量指向该文件,也相当于建立了指针与文件的关系。
ANSIC规定使用fopen函数来打开文件。fclose函数来关闭文件。
fopen函数
假如打开文件失败怎么办
我们建这个文件
我们怎么写内容到文件和读文件的内容呢
文件的顺序读写
我们一个一个来使用这些函数
fgetc函数
通过解释可以看出
fgetc是读一个字符,那么我们怎么读里面所有字符呢
应该考虑到循环了
我们读取字符失败返回EOF
这样的操作也不怎么好,后面我们会介绍一个函数专门读字符串的
fputc函数
我们也可以写一堆字符
fgets函数
假如内容为
我们的读取结果是什么
fgets函数是文本行读取,只能读一行的数据,第一行只有字符a,所以我们只能读取到a
fputs函数
fscanf函数
了解fsanf函数,我们可以通过类比的方法
fscanf函数与scanf函数的参数差异就是多了一个结构体类型指针
我们怎么使用这个函数呢
fscanf叫格式化输入函数,可以读取数据
fscanf读取100到a中
将hello1231.123当成了字符串读取到arr中
换行默认字符串结束,所以3.14读取到f中
之后打印出来,可以看出fscanf是按顺序读取的,以换行为结束标志
fprintf函数
fprintf函数叫格式化输出函数
它怎么实现的,我们类比printf函数
好像差不多,和fscanf函数与scanf对比一样
我们通过例子来看看
fprintf把数据写入文件
fread函数
fread函数得功能是二进制输入,即读取二进制数
fwrite函数
好像fwrite里面的参数贺fread函数一样哎,我们怎么去使用
fwrite是写二进制到文件里面
我们缕一缕里面参数
sscanf函数
我们怎么去使用sscanf函数,它与scanf函数有什么区别
scanf函数是从键盘获取数据,sscanf是从“2022helloworld”获取数据,按数顺序获取
与scanf函数一样读取字符串时遇到空格结束
sprintf函数
怎么使用
printf函数将数据读取到屏幕,sprintf函数读取到arr字符数组内
下期预告
文件的随机读写
文本文件和二进制文件
文件读取结束的判定
文件缓冲区