顺序读写函数的介绍:fscanf & fprintf

目录

函数介绍:

fprintf:

将结构体变量s的成员列表内容写入文件中:

文件效果:已经进行了格式化,3.140000是最明显的效果,因为float需要补齐0来补充精度

和printf的对比:

 不同之处: 

和printf的效果对比:

屏幕效果一样:

 fscanf:

从文件中读取数据,并将数据依次按照格式化分配到构体成员中,并使用printf打印:

文件内容:

代码操作: 

读取文件效果后的打印效果:从文件中读取了数据内容并且进行了printf打印

注意:

打印效果: 

和scanf的对比:

不同之处: 

和scanf对比效果: 

 小总结:

附赠内容:

 sscanf & sprintf:

sprintf:

 结果展示:

 内部展示:

sscanf:

 结果:


函数介绍:

顺序读写函数的介绍:fscanf & fprintf_第1张图片

fprintf:

将结构体变量s的成员列表内容写入文件中:

struct S
{
 int n;
 float f;
 char arr[20];
}

int main()
{
  struct S s = {100,3.14f,"zhangsan"};
  FILE* pf = fopen("data.txt","w");
  if (pf == NULL)
  {   perror("fopen");
      return 1;
   }
  fprintf(pf,"%d %f %s", s .n , s .f , s.arr) ;
  return 0;
}

文件效果:已经进行了格式化,3.140000是最明显的效果,因为float需要补齐0来补充精度

顺序读写函数的介绍:fscanf & fprintf_第2张图片

和printf的对比:

顺序读写函数的介绍:fscanf & fprintf_第3张图片

 不同之处: 
  • printf从标准流中输出数据,比如在屏幕中写入数据内容。
  • fprintf从指定流中输出数据,比如在指定的文件中写入数据内容。

和printf的效果对比:

printf("%d %f %s", s .n , s .f , s.arr) ;

写入结构体变量中的成员内容。 

fprintf(stdout,"%d %f %s", s .n , s .f , s.arr) ;

将结构体变量中的成员内容写入屏幕中。 

屏幕效果一样:

顺序读写函数的介绍:fscanf & fprintf_第4张图片

 fscanf:

从文件中读取数据,并将数据依次按照格式化分配到构体成员中,并使用printf打印:

文件内容:

顺序读写函数的介绍:fscanf & fprintf_第5张图片

代码操作: 
struct s
{ 
   int n;
   float f;
   char arr[20];
}

int main()
{
  struct S s = {0}:
  FILE* pf = fopen("data.txt","r");
  if (pf == NULL)
  {
     perror("fopen");
     return 1;
  }

  fscanf(pf."%d %f %s",&(s .n).&(s.f),s.arr);
  printf("%d %f %s",&(s .n).&(s.f),s.arr)
  return 0;
}
读取文件效果后的打印效果:从文件中读取了数据内容并且进行了printf打印
注意:

这里的结构体变量s一开始进行了初始化为0,所以单纯使用printf是打印不出来数据的,所以这里printf打印的数据是fscanf读取而来的,而printf打印了fscanf读取的内容。

打印效果: 

顺序读写函数的介绍:fscanf & fprintf_第6张图片

和scanf的对比:

顺序读写函数的介绍:fscanf & fprintf_第7张图片

不同之处: 
  • fscanf是从指定流中拿取数据,比如只读取文件中的内容。
  • scanf是从标准流中拿取数据,比如可以从键盘中或者其他变量中拿取数据。

和scanf对比效果: 

scanf("%d %f %s", &(s .n), &(s .f), s .arr);
fscanf(pf."%d %f %s",&(s .n), &(s.f),s.arr);

 小总结:

 

附赠内容:

 

 sscanf & sprintf:

sprintf:

把格式化的数据变成字符串。

sprintf(存放字符串的空间起始地址,格式化的格式,需要变成字符的数据变量)

顺序读写函数的介绍:fscanf & fprintf_第8张图片

将结构体变量s的成员进行赋值,而后又创建一个数组空间,将结构体变量的成员使用sprintf将成员变量变成一个字符串。

 结果展示:

顺序读写函数的介绍:fscanf & fprintf_第9张图片

 内部展示:

顺序读写函数的介绍:fscanf & fprintf_第10张图片

 已经变成字符串了。

sscanf:

从字符中读取格式化的数据。

sscanf(存放字符串的空间起始地址,格式化的格式,需要格式化的数据地址)

顺序读写函数的介绍:fscanf & fprintf_第11张图片

在之前sprintf的代码基础上,在设立一个结构体,将原先已经变成字符串的数据,从arr这个数组空间中拿出,并以此放入结构体变量t的成员中,进行格式化数据,最后进行打印。

 结果:

顺序读写函数的介绍:fscanf & fprintf_第12张图片

  • 前者是结构体变量s的成员被sprintf变成字符串后,放在arr数组空间的内部。
  • 后者是arr中的字符串被sscanf从数组空间中拿出,重新变成格式化数据的结构体变量t的成员。 

你可能感兴趣的:(文件操作,C语言,数据存储,c语言,数据存储,文件操作,函数)