#include<string.h>
#include<stdlib.h>
struct stu
{
int id
char name[10]
int height
int weight
int score
} stu[3]
main()
{
FILE *fp1,*fp2
int i,j
struct stu temp
fp1=fopen("f:\\stu.dat","r")
if(fp1==NULL)
{
printf("file error!\n")
exit(0)
}
fp2=fopen("f:\\stu2.dat","w")
if(fp2==NULL)
{
printf("file error!\n")
exit(0)
}
for(i=0 i<3 i++)
{
fscanf(fp1,"%d%s%d%d%d\n",&stu[i].id,&stu[i].name,&stu[i].height,&stu[i].weight,&stu[i].score)
}
fclose(fp1)
for(i=0 i<2 i++)
{
for(j=i+1 j<3 j++)
{
if(stu[i].score<stu[j].score)
{
temp=stu[i]
stu[i]=stu[j]
stu[j]=temp
}
}
}
for(i=0 i<3 i++)
{
fprintf(fp2,"%d%s%d%d%d",stu[i].id,stu[i].name,stu[i].height,stu[i].weight,stu[i].score)
}
fclose(fp2)
}
#include <stdio.h>int main()
{
struct test {
int a
char s[10]
double d
} tr[3] , tw[3] ={
{1,"hello1" , 100 },
{2,"hello2" , 90},
{3,"hello3", 200}
FILE *fp
fp=fopen("struct.dat" , "wb" )
if ( fp == NULL )
return -1
fwrite( (char*)tw , sizeof(struct test), 3 , fp )//将数组写入文件
fclose(fp)
//以上完成写操作
fp=fopen("struct.dat" , "rb" )
if ( fp == NULL )
return -1
fread( (char*)tr , sizeof(struct test), 3 , fp )//从文件中读三个结构体的数据,也可以一个一个的读
fclose(fp)
//输出读到的数据
{
int i
for(i=0i<3i++ )
printf("%d %s %lf\n" , tr[i].a , tr[i].s, tr[i].d )
}
return 0
}
结构体数据的保存通常以二进制形式进行. FILE *fw = fopen(filename,"wb")写函数是fwrite(&structdata,sizeof(structdata),1,fw)FILE *fr = fopen(filename,"rb")读函数是fread(*structdata,sizeof(structdata),1,fr)每次读写都是一个完整的结构体数据。