【超详细文件操作(二)】C语言

简介: 【超详细文件操作(二)】C语言

认识自己的无知是认识世界的最可靠的方法。


                                                                                                               ——蒙田《随笔集》

649feaf3c71177e509714c70986ed7ce_b29fe2c9bbb640b0bfad00243c4fb14a.jpeg

目录

1 .补充:

fprintf函数和fscanf函数

2. 对比一组函数


上一篇文章我们讲了基本的文件输入输出函数 以及文件操作,现在我再来补充几个函数。

1 .补充:

fprintf函数和fscanf函数e28e345f9c03646de20083ea7e16ae90_c3ff0b77164a40bba6886df5ada775b7.png

fprintf函数和printf函数是非常类似的;

8a0cdeda137ec71172c8dfbea92c5c72_beae7917bb5d409db53a58b623012b9a.png 我们对比一下,他们的返回值都是int,并且后面的参数相同,不同的只有fprintf函数的第一个参数不同。

那我们想想printf函数是怎么用的呢,下面我们试着来写一下

int a=0;

char b=0;

printf("%d  %d ",a,b);

这是我们最常使用printf函数的用法,那么fprintf函数是怎么用的呢;

完整代码展示:

struct S
{
  char name[20];
  int age;
  float score;
};
int main()
{
  struct S s = { "zhangsan", 20, 95.5f };
  //把s中的数据写到文件中
  FILE* pf = fopen("test.txt", "w");
  if (NULL == pf)
  {
    perror("fopen");
    return 1;
  }
  //写文件
  fprintf(pf, "%s %d %.1f", s.name, s.age, s.score);
  fclose(pf);
  pf = NULL;
  return 0;
}

可以看到fprintf函数在使用的时候,第一个参数加了pf,这就会将我们的数据写到我们的文件中


注:此处代码若有疑问,请看上一篇文章


或者评论区留言


运行结果:


74ab5b6679fa9ba65492007af139983c_b9160c3ecabe4c4dad6604d7b91cac0e.png


可以看到我们的数据已经写到了文件中,这就是fprintf函数的用法,是不是超级简单。


下面是fscanf函数:

2128d712dfc5d1ae94e49ed9514d75d1_0e97607edd32402ba6054423b561d300.png417002750beaf9cd54ffe67d204df3ad_3b3ea275693d4299bd4de41c80db24d3.png

可以看出他们两个函数又是只多了一个文件指针这个参数

老规矩,我们还是来回忆一下scanf函数的用法


int a=0

scanf("%d",&a);

这是我们最常使用scanf函数的用法,那么fscanf函数是怎么用的呢;

完整代码:

//读取一个结构体数据
struct S
{
  char name[20];
  int age;
  float score;
};
int main()
{
  struct S s = {0};
  //把s中的数据写到文件中
  FILE* pf = fopen("test.txt", "r");
  if (NULL == pf)
  {
    perror("fopen");
    return 1;
  }
  //读文件
  fscanf(pf, "%s %d %f", s.name, &(s.age), &(s.score));
  printf("%s %d %f\n", s.name, s.age, s.score);
  fclose(pf);
  pf = NULL;
  return 0;
}

此处我们可以看到,fscanf函数后面第一个参数是pf,意思是从文件中读取数据,然后我们输出出来;

运行结果:

18d8ab47328b0bfdc398b8cae8c92cee_86fd72acae764625813ced6765cc536a.png

可以看到我们此前没有在文件中写入数据,但是从文件中读取了出来,这就是fscanf函数;

2. 对比一组函数

对于上面一组函数,我想你们肯定会有疑问,这几个函数有什么区别呢,有什么用呢?下面我来为大家讲解一下

1034f785fc70a35bece1eb5640dabf0c_58411f2bede143ad934132075a053a6e.png

首先,我先来讲解一下各个函数是干什么的

scanf函数:他是按照一定的格式输入数据,从键盘获取

printf函数;按照一定的格式,把数据打印到屏幕上

他们两个函数都是格式化的输入/输出语句


fprintf函数:按照一定的格式向输出流(文件)输出数据

fscanf函数:按照一定的格式从输入流(文件)输入数据

//        适用于所有的输入/输出流的格式化输入/输出语句

431b4f613e44d87a7120f00b9686e62c_4bef907f2d734de780f48b87fee8680c.png

sprintf函数是按照一定的格式将数据转换成 str 字符串;

下面请看例子:

struct S
{
  char name[10];
  int age;
  float score;
};
int main()
{
  char buf[100] = {0};
  struct S tmp = { 0 };
  struct S s = { "zhangsan", 20, 95.5f };
  //能否把这个结构体的数据,转换成字符串
  //"zhangsan 20 95.5"
  sprintf(buf, "%s %d %f", s.name, s.age, s.score);//以字符串的形式打印
  printf("%s\n", buf);
}

运行结果:

可以看到sprintf函数可以把格式化数据按照指定的格式转化成字符串,这就是sprintf函数的功能;那么我们可以不可以在转化回来呢,那就需要用到sscanf函数了;

sscanf函数是将字符串转换成一定的格式的数据;下面请看示例

代码展示:

struct S
{
  char name[10];
  int age;
  float score;
};
int main()
{
  char buf[100] = {0};
  struct S tmp = { 0 };
  struct S s = { "zhangsan", 20, 95.5f };
  //能否把这个结构体的数据,转换成字符串
  //"zhangsan 20 95.5"
  sprintf(buf, "%s %d %f", s.name, s.age, s.score);//以字符串的形式打印
  printf("%s\n", buf);
  //能否将buf中的字符串,还原成一个结构体数据呢?
  sscanf(buf, "%s %d %f", tmp.name, &(tmp.age), &(tmp.score));
  printf("%s %d %f\n", tmp.name, tmp.age, tmp.score);//以结构的形式打印
  return 0;
}

这里我们定义一个struct tmp,

sscanf(buf, "%s %d %f", tmp.name, &(tmp.age), &(tmp.score));

这段代码的意思是从buf里面按照"%s %d %f"格式   还原出  定义的结构体的数据  并  存放到tmp中

请看运行结果:

可以看到两次打印结果一样,说明我们可以将一个结构体数据转化成字符串,也可以将字符串提取数据放在结构体当中。

  • sscanf函数:从字符串中按照一定的格式读取出格式化数据
  • sprintf函数:把格式化的数据按照一定的格式转化成字符串


此次顺序读写完结,往后会更新文件的随机读写。

欢迎各位大佬指点!!!!

相关文章
TU^
|
9天前
|
存储 编译器 C语言
C语言之文件操作
因为有缓冲区的存在,C语言在操作文件的时候,需要做刷新缓冲区或者在⽂件操作结束的时候关闭文件。如果不做,可能导致读写⽂件的问题。
TU^
20 0
|
4天前
|
存储 编译器 C语言
c语言文件操作
c语言文件操作
|
4天前
|
存储 缓存 编译器
『C语言』文件操作详解
『C语言』文件操作详解
|
5天前
|
存储 C语言
动态+静态+文件操作 C语言实现通讯录
通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址
14 0
|
5天前
|
存储 自然语言处理 编译器
玩转C语言——文件操作、预处理、编译、链接
玩转C语言——文件操作、预处理、编译、链接
10 0
|
5天前
|
存储 C语言
C语言文件操作
C语言文件操作
18 2
|
5天前
|
API C语言 C++
C语言文件操作详解(上)(二)
本文详细介绍了C语言中的文件操作,包括fopen()、fclose()、fread()、fwrite()、fgetc()、fputc()、fgets()、fputs()、fscanf()和fprintf()等函数的使用。这些函数分别用于文件的打开、关闭、读取、写入和格式化输入输出。文章还通过示例代码解释了如何读取和写入字符串、结构体等数据,并提到了标准输入流(stdin)、标准输出流(stdout)和标准错误流(stderr)。
18 1
|
5天前
|
API 文件存储 C语言
C语言文件操作详解(上)(一)
这段内容主要介绍了C语言中文件操作的基本概念和常用函数。
24 2
|
7天前
|
存储 人工智能 大数据
C语言中的文件操作技术
C语言中的文件操作技术
|
9天前
|
存储 C语言 开发者
C语言与文件操作
C语言与文件操作
13 1