把结构用二进制方式写入文件,并读出来[转]

很简单,但是经常被问及的问题。下面的代码是C语言写的,将一个结构student用二进制的方式写入文件e:\fle.bxt中,并读取出来。

#include <stdio.h>

#include <string.h>

struct student

{

    int num;

    char name[10];

    float score;

};

 

main()

{

         char* filename="e:\\file.bxt";

    student a;

    FILE *fp;

 

         // 为二进制写而打开文件

         fp = fopen(filename,"wb");

    if(!fp)

         {

                   printf("error in opening file\n");

         }

         // 准备数据1

         a.num = 1;

         strcpy(a.name, "Albert");

         a.score = (float)99.9;

         // 二进制写文件1

         fwrite(&a, sizeof(student), 1, fp);

 

         // 准备数据2

         a.num = 2;

         strcpy(a.name, "Bob");

         a.score = (float)98.5;

         // 二进制写文件2

         fwrite(&a, sizeof(student), 1, fp);

         // 关闭文件

         fclose(fp);

  

         // 为二进制读打开文件

         fp = fopen(filename,"rb");

         // 读第一个存入的结构数据

         fread(&a,sizeof(student),1,fp);

         // 打印读出的数据

         printf("%d\t%s\t%f\n",a.num, a.name, a.score);

 

         // 重新定位到下第二个存入的结构数据

         fseek(fp, sizeof(student), SEEK_SET);

         // 读第二个存入的结构数据

         fread(&a,sizeof(student),1,fp);

         // 打印读出的数据

         printf("%d\t%s\t%f\n",a.num, a.name, a.score);

         // 关闭文件

         fclose(fp);

        

         return 0;

}

 

// 输出结果:

// 1    Albert        99.900002

// 2    Bob           98.500000

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/pathuang68/archive/2009/06/16/4272163.aspx

上述读数据可以这样

         // 为二进制读打开文件
         fp = fopen(filename,"r");
         // 读第一个存入的结构数据
         fread(&a,sizeof(student),1,fp);
         // 打印读出的数据
   while(!feof(fp))
   {
   printf("%d\t%s\t%f\n",a.num, a.name, a.score);
   fread(&a,sizeof(student),1,fp);
   }
         // 关闭文件
         fclose(fp);

 

结构体使用:

int main()

    struct employee
    {
        char name[10];
        float bs;
        float fs;
        float out;
        float real;
    }people[3];
   
    int i;
   
    for(i=0;i<3;i++)
    {
        printf("请输入第%d个员工的信息( 姓名 基本工资 浮动工资 支出) :",(i+1));
        fflush(stdin); 
        scanf("%s %f %f %f",people[i].name,&people[i].bs,&people[i].fs,&people[i].out);
       
        people[i].real=people[i].bs+people[i].fs-people[i].out;
    }
   
    printf("现在输出的是三个员工的姓名和实发工资:\n");
     for(i=0;i<3;i++)
    {
        printf("第%d个员工:%s\t%f\n",(i+1),people[i].name,people[i].real);
   
    }
    printf("输出完毕");
   
    return 0;


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值