【C语言】文件基本操作(下)

简介: 大家好!我是保护小周ღ,本期为大家带来的是文件的基本操作,格式化的形式读写文件,二进制的形式读写文件,标准输入、输出流,再认识一下sprintf(),sscanf(),以及文件定位等方面的知识。


 image.gif

大家好!我是保护小周ღ,本期为大家带来的是文件的基本操作,格式化的形式读写文件,二进制的形式读写文件,标准输入、输出流,再认识一下sprintf(),sscanf(),以及文件定位等方面的知识。

image.gif


上期我们基本了解了文件读写字符数据的基本使用方法以及标准的书写格式,本来带大家学习更深层次文件操作,我们先从格式化读写函数开始;

没有学习文件基本操作(上)的朋友,也可以通过博主的链接访问学习:文件基本操作(上)_保护小周ღ的博客-CSDN博客


四、文件的顺序读写

4.5 格式化写—fprint()

fprintf()函数的功能与printf()函数的功能相似,都是格式化读写函数,两个函数的区别在于:printf(),针对的是标准输出流-stdout(显示器)

fprintf()可以是针对标准输出流,也可以是我们指定的流,文件流

首先我们先来观察一下两个函数的参数:

int printf(const char *format[,argument]...);
int fprintf(FILE *stream,const char *format[,argument]...)

是不是特别像,fprintf()函数的调用格式为:fprintf(文件指针,格式字符串,输出表列);

应该有点懵吧?那我们运用到程序里看看区别:

第一步,我们定义一个结构体变量。

image.gif

第二步,我们录入信息,这里为方便大家观察,我直接在创建信息录的时候输入数据并调用函数打印信息。

image.gif

第三步,我们运用printf()打印信息,fprintf()写入信息至文件

image.gif

这样会不会容易理解一些?当然我们也可以运用循环写入更多的信息。且往下瞧,待会再去实现;


4.6 格式化读—fscanf()

fscanf()函数的功能与scanf()函数的功能相似,都是格式化读写函数,两个函数的区别在于:scanf()针对的是标准输入流stdio(键盘)

fscanf()可以是针对标准输入流,也可以是我们指定的流,文件流

两个函数的参数同样类似,fscanf()函数的调用格式为:fscanf(文件指针,格式化字符串,输入列表);

可能大家还是不容易理解参数是什么,那大家看看这样是不是就能好理解一点:

fscanf(fp,"%d %f %s",&d,&c,str);//这里大家注意,如果参数是变量,我们就一定要加取地址符‘&’,如果是数组就可以不用加;

image.gif

我们再用代码看看具体是怎么一回事:

第一步,我们定义一个结构体变量。image.gif

第二步,我们调用函数把之前的fprintf()函数写入文件的信息读取出来

image.gif

第三步,实现

image.gif

成功将数据从文件中读出!


4.7 标准输入、输出流

stdin:标准输入流(键盘)

stdout:标准输出流 (显示器,屏幕)

我们利用格式化输入输出函数简单介绍一下,了解一下即可;

image.gif

是不是觉得自己离大牛又近了一步?不急不急咱接着来。

先给大家补充一下 文件怎样写入信息或读出信息,当给文件写入数据时,最先应该在输出缓冲区,等缓冲区满了再输出到磁盘保存,当从文件里读取信息时,数据应先到达输入缓冲区,然后再给到程序对应的数据类型变量等。

image.gif


4.8 以二进制的形式写文件—fwrite()

我们先介绍一下函数的参数:

size_t fwrite(const void *buffer , size_t size, size _t count ,  FILE* stream);

image.gif

我们结合代码来看看具体是怎么使用的:

老样子先定义结构image.gif

为了方面理解代码,我这里在定义的时候直接录入信息,并调用函数

image.gif

实现:

image.gif

可恶让fwrite()装到了*****


4.9 以二进制的形式读文件—fread()

同样是先介绍参数:

size_t fread( void *buffer , size_t size, size _t count ,  FILE* stream);

是不是在哪里见过?没错!且看fwrite()函数的参数:

size_t fwrite(const void *buffer , size_t size, size _t count ,  FILE* stream);

用句话来形容,fread从流里读取count个size大小的数据,放到buffer里面去。

image.gif

先利用fwrite()写入数据,再利用fprintf()读取数据;

我们看看这个两个函数再实际运用中的表现:

image.gif



image.gif

这样我们就可以做到程序结束时,我们保存信息到文件,等程序重新运行时我们可以从文件里加载信息。


4.10 sscanf() and sprintf()

我们简单的认识一下这两个函数:

sscanf()函数是从字符串里读取格式化的数据

sprintf()函数是把格式化的数据输出到(存储到)字符串中

sprintf()的使用

image.gif

我们根据程序一句话介绍参数:信息存放在哪里,以什么样的格式,从哪里读取信息

注意数据类型已经是字符串了!


sscanf()的使用

image.gif

我们根据程序一句话介绍参数:sscanf(),从buffer字符数组中,读取什么样的格式,放到哪里去。

到这里我们这期也接近了尾声,总结一下输入,出入函数之间的细微差别:

scanf/printf 是针对标准输入流/标准输出流的格式化输入/输出语句;

fscanf/fprintf 是针对所有输入流/输出流的格式化输入/输出语句;


五、文件的随机读写

前面介绍的文件的读写方式都是顺序读写,都是只能从头开始,如果我们只要求读写文件中某一部分信息,就没有办法了,这样我们就要用到可以移动文件指针位置的函数,称之为文件定位,常用的主要有rewind() and fseek()函数

rewind()函数我们前面(文件基本操作上)也使用过,函数调用形式为:rewind(文件指针);

功能是将文件指针位置移动到文件首。

fseek()函数用来移动文件内部的指针位置;函数调用形式为:fseek(文件指针,位移量,起始点);

位移量:如果用常量表示位移量的时候,要求后缀加'L'。

起始点:规定的起始点有3种,文件首,文件当前位置,文件尾。其表达方式如下:

image.gif

例句的意义为:把文件指针的位置移到离文件首100个字节处。另外,fseek函数一般用于二进制文件。


通过对文件基本操作(下)的学习,我们应该对深层次的文件的基本读写有了一个全面的认识

希望对大家有所帮助。

感谢每一个观看本篇文章的朋友,更多精彩敬请期待:保护小周ღ  *★,°*:.☆( ̄▽ ̄)/$:*.°★*

遇见了你,所有的星星都落在了我的头上image.gif

相关文章
|
20天前
|
存储 编译器 C语言
如何在 C 语言中判断文件缓冲区是否需要刷新?
在C语言中,可以通过检查文件流的内部状态或使用`fflush`函数尝试刷新缓冲区来判断文件缓冲区是否需要刷新。通常,当缓冲区满、遇到换行符或显式调用`fflush`时,缓冲区会自动刷新。
|
20天前
|
存储 编译器 C语言
C语言:文件缓冲区刷新方式有几种
C语言中文件缓冲区的刷新方式主要包括三种:自动刷新(如遇到换行符或缓冲区满)、显式调用 fflush() 函数强制刷新、以及关闭文件时自动刷新。这些方法确保数据及时写入文件。
|
1月前
|
C语言
【C语言】探索文件读写函数的全貌(三)
【C语言】探索文件读写函数的全貌
|
1月前
|
存储 C语言
【C语言】探索文件读写函数的全貌(二)
【C语言】探索文件读写函数的全貌
|
1月前
|
C语言
【C语言】探索文件读写函数的全貌(一)
【C语言】探索文件读写函数的全貌
|
1月前
|
存储 文件存储 C语言
【C语言】深入了解文件:简明指南
【C语言】深入了解文件:简明指南
|
2月前
|
Linux C语言
C语言 文件IO (系统调用)
本文介绍了Linux系统调用中的文件I/O操作,包括文件描述符、`open`、`read`、`write`、`lseek`、`close`、`dup`、`dup2`等函数,以及如何获取文件属性信息(`stat`)、用户信息(`getpwuid`)和组信息(`getgrgid`)。此外还介绍了目录操作函数如`opendir`、`readdir`、`rewinddir`和`closedir`,并提供了相关示例代码。系统调用直接与内核交互,没有缓冲机制,效率相对较低,但实时性更高。
|
3月前
|
存储 C语言
【C语言】C语言-学生成绩管理系统(源码+数据文件+课程论文)【独一无二】
【C语言】C语言-学生成绩管理系统(源码+数据文件+课程论文)【独一无二】
51 15
|
3月前
|
存储 C语言
【c语言】职工信息管理系统 包含读取写入txt文件,职工信息的增删改查
【c语言】职工信息管理系统 包含读取写入txt文件,职工信息的增删改查
|
3月前
|
存储 自然语言处理 程序员
【C语言】文件的编译链接和预处理
【C语言】文件的编译链接和预处理