文件操作(C语言)中

简介: 文件操作(C语言)

4.4文本输入函数


fgets适用于所有输入流


从文件中读取字符串并拷贝到字符数组中


c6b229d7dfb8e774685547e5cbfd990b_aff1c237d4e943379b8e33e0c0104e18.png


第一个参数,接收拷贝的字符的指向字符数组的指针
第二个参数,需要读取字符的个数
第三个参数,是指向输入流的FILE对象的指针


实例如下


int main()
{
  //打开文件
  FILE* pf = fopen("test.txt", "r");
  //判断文件是否成功打开
  if (pf == NULL)
  {
  printf("%s\n", strerror(errno));
  return;
  }
  //读文件
  char arr[20] = { 0 };
  fgets(arr, 5, pf);
  printf("%s\n", arr);
  //关闭文件
  fclose(pf);
  pf = NULL;
  return 0;
}


4efcc7481ef8fbef0b2e5b99bfb89876_12656b05729247db8ee7479dc9204d0c.png

43a2986bc2f7e4811df9de6e5053e1d9_d90b664aa5a04620b1f12adc99c765a4.png


这里只拷贝四个字符,'\0’是字符数组后不可或缺的字符。


4.5格式化输出函数


fprintf 适用于所有输出流


将格式化数据打印到标准输出,也就是打印到文件中


先比较一下fprintf和printf


b8907636ae6f81c2f08404fe5c061ce9_6c6bacaa8d254d218e9157ba117d4e26.png

339be060daae7cdeb45a16cffe2b86ef_7b64a902f0d84cefbc8dfac8e5eaae4b.png


比较之后会发现,只是相差了一个是指向输出流的FILE对象的指针


实例如下


struct M
{
  char name[20];
  int age;
  double weight;
};
int main()
{
  struct M m = { "crush",20,55.5 };
  FILE* pf = fopen("test.txt", "w");
  if (pf == NULL)
  {
  printf("%s\n", strerror(errno));
  return;
  }
  fprintf(pf, "%s %d %lf", m.name, m.age, m.weight);
  fclose(pf);
  pf = NULL;
  return 0;
}


a035cbc7cc4f3566946961ce4ff88546_ea1e0065f5b3429d874cff46002069b3.png


4.6格式化输入函数


fscanf适用于所有输入流


从输入流中读取格式化数据


先比较一下fscanf和scanf


4e2ed68bb5aa009246d980255aa8273b_d34dacaaabf047c99f33835a4d62b651.png


dd62d0657f4d5303ee3a71dd761a581c_0a95eb98630341d28b710589353a6df0.png


相比之后发现,相差了一个指向输入流的FILE对象的指针


实例如下


struct M
{
  char name[20];
  int age;
  double weight;
};
int main()
{
  struct M m = {0};
  FILE* pf = fopen("test.txt", "r");
  if (pf == NULL)
  {
  printf("%s\n", strerror(errno));
  return;
  }
  fscanf(pf, "%s %d %lf", m.name, &(m.age), &(m.weight));
  printf("%s %d %lf", m.name, m.age, m.weight);
  fclose(pf);
  pf = NULL;
  return 0;
}


86ed0b4e4ecac6d399031cc2d3ee90d0_1e792f281d41401f937da0ae3705d746.png


4.7二进制输出


fwrite 只适用于文件


将数据转换成二进制写入输出流中


ea1548e8eb215a0ed385fed44f81c1ab_60f79a4efc174f93a9c983c40262878a.png


第一个参数,指向要写入的元素数组的指针
第二个参数,要写入元素的大小
第三个参数,要写入几个元素
第四个参数,指向输出流的FILE对象的指针


实例如下


struct M
{
  char name[20];
  int age;
  double weight;
};
int main()
{
  struct M m = { "crush",20,55.5 };
  FILE* pf = fopen("test.txt", "wb");
  if (pf == NULL)
  {
  printf("%s\n", strerror(errno));
  return;
  }
  fwrite(&m,sizeof(struct M),1,pf);
  fclose(pf);
  pf = NULL;
  return 0;
}


5a081ded59b3cc206f20c662aebb77fe_ff85fa22ca5e41799c55d2e42982ee97.png


由于是二进制写入,所以有些数据写入之后就会看不懂


4.8二进制输入


fread 只适用于文件


从输入流中读取二进制数据


返回值size_t为实际读取到的个数


cc4ac2b22c23ca4df6de4111862d4582_d22135afde4a473a9247d2a73540196f.png


第一个参数,指向一个大小至少为(size*count)字节的内存块的指针
第二个参数,要读取的每个元素的大小
第三个参数,要读取元素的个数
第四个参数,指向输入流的FILE对象的指针


实例如下


struct M
{
  char name[20];
  int age;
  double weight;
};
int main()
{
  struct M m = { 0 };
  FILE* pf = fopen("test.txt", "rb");
  if (pf == NULL)
  {
  printf("%s\n", strerror(errno));
  return;
  }
  fread(&m,sizeof(struct M),1,pf);
  printf("%s %d %lf", m.name, m.age, m.weight);
  fclose(pf);
  pf = NULL;
  return 0;
}


56828967f91ab9eab4b598683c97103e_a0a63adb0ee1414c97cfce1957c18ce6.png


4.9比较一组函数


scanf/fscanf/sscanf
printf/fprintf/sprintf


85e8675d171aa556c1eab6e26943e508_3a29ab7cb6964bef817b2bd4641aa6bb.png


sprintf


19979d242041cd9b0ef8818201c2452f_87cb1d7886b9437ea3a307a2a98ef470.png


sscanf


48ba21b5cef9e869706f51b91e0fc9d8_ff1d61ae89414332bc361d87d8f2783d.png


实例如下


struct M
{
  char name[20];
  int age;
  double weight;
};
int main()
{
  struct M m = { "crush",20,55.5 };
  struct M n = { 0 };
  char arr[100];
  //把s中的格式化数据转化成字符串放到arr中
  sprintf(arr, "%s %d %lf", m.name, m.age, m.weight);
  printf("%s\n", arr);
  //从字符串arr中获取一个格式化的数据到n中
  sscanf(arr, "%s %d %lf", n.name, &(n.age), &(n.weight));
  return 0;
}

3bca9d79fca7527de5f578285583d144_4d77b3d78d9c46f8b3756e0287a392e2.png


目录
相关文章
|
1月前
|
存储 C语言
【c语言】玩转文件操作
本文介绍了C语言中文件操作的基础知识,包括文件的打开和关闭、文件的顺序读写、文件的随机读写以及文件读取结束的判定。详细讲解了`fopen`、`fclose`、`fseek`、`ftell`、`rewind`等函数的使用方法,并通过示例代码展示了如何进行文件的读写操作。最后,还介绍了如何判断文件读取结束的原因,帮助读者更好地理解和应用文件操作技术。
35 2
|
2月前
|
存储 C语言
C语言文件操作(2)
【10月更文挑战第2天】
|
2月前
|
程序员 编译器 C语言
C语言底层知识------文件操作
本文详细介绍了文件操作的基本概念,包括文件的分类(程序文件和数据文件,其中着重于数据文件的文本文件和二进制文件),流的概念及其在C程序中的应用,以及标准输入输出流stdin、stdout和stderr的作用。作者通过示例展示了如何使用fopen、fclose和常见的读写函数如fgetc、fputc和fgets进行文件操作。
23 2
|
3月前
|
C语言
C语言——文件操作
本文介绍了文件的基本操作,包括文件的打开、关闭、读取和写入。使用`fopen`函数以不同模式(如“r”、“w”等)打开文件,并通过`fclose`关闭。文章详细解释了如何利用`fputc`、`fputs`及`fprintf`进行格式化写入,同时介绍了`fgetc`、`fgets`和`fscanf`用于文件内容的读取。此外,还涵盖了二进制文件的读写方法以及如何通过`fseek`、`ftell`和`rewind`实现文件的随机访问。
51 1
C语言——文件操作
|
2月前
|
存储 缓存 编译器
文件操作——C语言
文件操作——C语言
|
2月前
|
存储 C语言
简述C语言文件操作
简述C语言文件操作
11 0
|
2月前
|
存储 文件存储 C语言
深入C语言:文件操作实现局外影响程序
深入C语言:文件操作实现局外影响程序
|
2月前
|
存储 程序员 编译器
C语言文件操作(1)
【10月更文挑战第1天】
|
2月前
|
存储 C语言
C语言的文件操作
C语言的文件操作
23 0
|
2月前
|
存储 移动开发 Unix
C 语言文件操作详解
C 语言文件操作详解