• 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	%s
    ",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	%s
    ",stur[i].stu_id,stur[i].name);
    
    }

  • 相关阅读:
    Spark RDD操作(1)
    scala学习笔记(8): 列表的map,flatMap,zip和reduce
    (转)hadoop基本操作命令
    Mac下配置环境变量
    Spark快速入门(1)
    urllib2 request 模拟伪装浏览器
    linux下面Zookeeper的单机模式(standalone)
    linux redis安装
    python OCR 图形识别
    mysql 、慢查询、到底如何玩
  • 原文地址:https://www.cnblogs.com/xiaomingzaixian/p/9402010.html
Copyright © 2020-2023  润新知