【超详细文件操作(二)】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函数:把格式化的数据按照一定的格式转化成字符串


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

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

相关文章
|
9天前
|
存储 程序员 C语言
【C语言】文件操作函数详解
C语言提供了一组标准库函数来处理文件操作,这些函数定义在 `<stdio.h>` 头文件中。文件操作包括文件的打开、读写、关闭以及文件属性的查询等。以下是常用文件操作函数的详细讲解,包括函数原型、参数说明、返回值说明、示例代码和表格汇总。
28 9
|
11天前
|
存储 数据管理 C语言
C 语言中的文件操作:数据持久化的关键桥梁
C语言中的文件操作是实现数据持久化的重要手段,通过 fopen、fclose、fread、fwrite 等函数,可以实现对文件的创建、读写和关闭,构建程序与外部数据存储之间的桥梁。
|
13天前
|
算法 C语言
C语言中的文件操作技巧,涵盖文件的打开与关闭、读取与写入、文件指针移动及注意事项
本文深入讲解了C语言中的文件操作技巧,涵盖文件的打开与关闭、读取与写入、文件指针移动及注意事项,通过实例演示了文件操作的基本流程,帮助读者掌握这一重要技能,提升程序开发能力。
43 3
|
1月前
|
存储 C语言
【c语言】玩转文件操作
本文介绍了C语言中文件操作的基础知识,包括文件的打开和关闭、文件的顺序读写、文件的随机读写以及文件读取结束的判定。详细讲解了`fopen`、`fclose`、`fseek`、`ftell`、`rewind`等函数的使用方法,并通过示例代码展示了如何进行文件的读写操作。最后,还介绍了如何判断文件读取结束的原因,帮助读者更好地理解和应用文件操作技术。
39 2
|
2月前
|
存储 C语言
C语言文件操作(2)
【10月更文挑战第2天】
|
2月前
|
程序员 编译器 C语言
C语言底层知识------文件操作
本文详细介绍了文件操作的基本概念,包括文件的分类(程序文件和数据文件,其中着重于数据文件的文本文件和二进制文件),流的概念及其在C程序中的应用,以及标准输入输出流stdin、stdout和stderr的作用。作者通过示例展示了如何使用fopen、fclose和常见的读写函数如fgetc、fputc和fgets进行文件操作。
25 2
|
2月前
|
存储 缓存 编译器
文件操作——C语言
文件操作——C语言
|
2月前
|
存储 C语言
简述C语言文件操作
简述C语言文件操作
11 0
|
2月前
|
存储 文件存储 C语言
深入C语言:文件操作实现局外影响程序
深入C语言:文件操作实现局外影响程序
|
2月前
|
存储 程序员 编译器
C语言文件操作(1)
【10月更文挑战第1天】