c语言读取结构体文件并排序

Python023

c语言读取结构体文件并排序,第1张

#include<stdio.h>

#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)每次读写都是一个完整的结构体数据。