C语言文件读写(结构体文件)

有时候,我们需要将输入的数据存储起来,这时候就需要用到文件,对于C语言而言,文件的读写有多种方式,下面主要是结构体文件的读写,例如student.dat(第一列是学号,第二列是姓名)

20180001    xiaoming
20180002    小明

1.定义结构体

//定义一个结构体
typedef struct Student{
  int stu_id;
  char name[100];
} Stu;

2.写数据

// 定义一个文件指针
FILE *fp ;

// 初始化一个结构体数组
Stu stuw[2] = {
{20180001, "xiaoming" },
{20180002, "小明"}
} ;

// 打开文件,没有文件自动创建
fp = fopen("student.dat","wb"); // b:表示以二进制写入
 // 写入数据
fwrite( (char*)stuw,sizeof(Stu),2,fp); //2:表示将数组中两个元素写入文件
// 关闭文件
fclose(fp);

3.读数据

// 定义一个文件指针
FILE *fp ;
// 定义一个buf结构体,用于得到文件内容
struct stat buf;
// 定义一个文件行数记录变量
int rows;
// 定义一个Student结构体
Stu stur[MAX]; // MAX通过#define设置为100

// 求文件中的行数(记录个数)
stat("student.dat",&buf);
rows = buf.st_size/sizeof(Stu);

// 打开文件
fp = fopen("student.dat","rb");
// 读取数据到数组中
fread((char *)stur,sizeof(Stu),rows,fp);
// 关闭文件
fclose(fp);

// 遍历数组,打印数据信息
for(int i=0;i<rows;i++)
  printf("%d\t%s\n",stur[i].stu_id,stur[i].name);

具体demo.c

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#define MAX 100

//定义一个结构体
typedef struct Student{
  int stu_id;
  char name[100];
} Stu;


int main(int argc, char const *argv[]) {
  /* code */
  // 声明函数
  void Write();
  void Read();

  // 函数调用
  Write();
  Read();

  return 0;
}


/* 数据写入文件 */
void Write(){
  // 定义一个文件指针
  FILE *fp ;

  // 初始化一个结构体数组
  Stu stuw[2] = {
  {20180001, "xiaoming" },
  {20180002, "小明"}
  } ;

  // 打开文件,没有文件自动创建
  fp = fopen("student.dat","wb"); // b:表示以二进制写入
  // 写入数据
  fwrite( (char*)stuw,sizeof(Stu),2,fp); //2:表示将数组中两个元素写入文件
  // 关闭文件
  fclose(fp);

}

// 文件数据读取
void Read(){
  // 定义一个文件指针
  FILE *fp ;
  // 定义一个buf结构体,用于得到文件内容
  struct stat buf;
  // 定义一个文件行数记录变量
  int rows;
  // 定义一个Student结构体
  Stu stur[MAX];

  // 求文件中的行数(记录个数)
  stat("student.dat",&buf);
  rows = buf.st_size/sizeof(Stu);

  // 打开文件
  fp = fopen("student.dat","rb");
  // 读取数据到数组中
  fread((char *)stur,sizeof(Stu),rows,fp);
  // 关闭文件
  fclose(fp);

  // 遍历数组,打印数据信息
  for(int i=0;i<rows;i++)
    printf("%d\t%s\n",stur[i].stu_id,stur[i].name);

}

猜你喜欢

转载自www.cnblogs.com/xiaomingzaixian/p/9402010.html