33. 使用fread()/fwrite()往文件中写入结构体,从文件中读出结构体

  1 //读写结构体
  2 #include <stdio.h>
  3 typedef struct student
  4 {
  5     int num;
  6     char name[30];
  7     char sex;
  8     float math;
  9     float english;
 10     float chinese;
 11 
 12 }Stu;
 13 
 14 Stu s[5] =
 15 {
 16     1001,"wukong",'x',99,99,99,
 17     1002,"songjiang",'x',99,22,11,
 18     1003,"baoyu",'x',79,33,100,
 19     1004,"liudehua",'y',100,100,88,
 20     1005,"zhaosi",'z',33,34,12
 21 };
 22 
 23 int main(void)
 24 {
 25 
 26     //往文件中写入结构体
 27     FILE* pf = fopen("G:/qtcode/stu.data","w+");
 28     if(pf == NULL)
 29         exit(-1);
 30 #if 1
 31     //写入方式1
 32     int i;
 33     for(i = 0;i<sizeof(s)/sizeof(*s);i++)
 34     {
 35         fwrite((void*)(&s[i]),sizeof(Stu),1,pf);
 36     }
 37 #endif
 38 #if 0
 39     //写入方式2
 40     fwrite((void*)s,sizeof(s),1,pf);
 41 
 42 #endif
 43 #if 0
 44     //写入方式3
 45     fwrite((void*)s,sizeof(Stu),5,pf);
 46 
 47 #endif
 48 
 49 
 50 
 51     rewind(pf);
 52     //从文件中读结构体
 53 #if 0
 54     //读出方式1
 55     Stu buf;
 56     while( fread((void*)&buf,sizeof(Stu),1,pf) )
 57     {
 58         printf("num = %d\n",buf.num);
 59         printf("name = %s\n",buf.name);
 60         printf("sex = %c\n",buf.sex);
 61         printf("math = %.2f\n",buf.math);
 62         printf("english = %.2f\n",buf.english);
 63         printf("chinese = %.2f\n",buf.chinese);
 64         printf("--------------\n");
 65     }
 66 #endif
 67 
 68 #if 0
 69     //读出方式2
 70     Stu buf[3];
 71     int j,n;
 72     while((n = fread((void*)buf,sizeof(Stu),3,pf)) > 0)
 73     {
 74         for(j = 0;j < n;j++)
 75         {
 76             printf("num = %d\n",buf[j].num);
 77             printf("name = %s\n",buf[j].name);
 78             printf("sex = %c\n",buf[j].sex);
 79             printf("math = %.2f\n",buf[j].math);
 80             printf("english = %.2f\n",buf[j].english);
 81             printf("chinese = %.2f\n",buf[j].chinese);
 82             printf("--------------\n");
 83         }
 84     }
 85 #endif
 86     
 87 #if 0
 88     //读出方式3
 89     Stu buf[5];
 90     int j;
 91     fread((void*)buf,sizeof(Stu),5,pf);
 92     for(j = 0;j < 5;j++)
 93     {
 94         printf("num = %d\n",buf[j].num);
 95         printf("name = %s\n",buf[j].name);
 96         printf("sex = %c\n",buf[j].sex);
 97         printf("math = %.2f\n",buf[j].math);
 98         printf("english = %.2f\n",buf[j].english);
 99         printf("chinese = %.2f\n",buf[j].chinese);
100         printf("--------------\n");
101     }
102 #endif
103     return 0;
104 }

 

posted @ 2018-08-15 16:32  2018年8月10日注册  阅读(3622)  评论(0编辑  收藏  举报