很简单,但是经常被问及的问题。下面的代码是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;
}