文件写入-结构体排序

/*
3、编写一个程序,实现如下功能:
(1)将5个学生的信息(包括学号、姓名、成绩三项信息)写入到file1中。
(2)从file1中读出5个学生的信息,按成绩自高到低排序,排序后的结果写入到文件file2中。
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 5

typedef struct student
{
    int num;
    char name[8];
    float socre;
}Student;

//写入成绩并且返回stu值
void write(char *file,FILE *fp,Student *stu)
{
    if((fp=fopen(file,"w"))==NULL)
    {
        printf("文件创建失败");
        return;
    }
    
    for(int i=0;i<N;i++)
    {
        fprintf(fp,"%d %s %.2f\n",stu[i].num,stu[i].name,stu[i].socre);
    }
    fclose(fp);
}

//排序准备写入文件2的数据
Student *sort(Student *stu2)
{
    Student tmp;//结构体临时变量,不要定义为*tmp会报错!!!

    //冒泡排序
    for(int i=0;i<N-1;i++)
    {
        for(int j=0;j<N-i-1;j++)
        {
            if(stu2[j].socre<stu2[j+1].socre)
            {
                tmp     =  stu2[j];
                stu2[j]  = stu2[j+1];
                stu2[j+1]= tmp ;
            }
        }
    }
}

int main()
{
    FILE *fp;
    char *file1="D:\\test1.txt",*file2="D:\\test2.txt";

    //准备成绩
    Student stu[N];
    printf("请输入五位个学生的学号/姓名/成绩(格式为xxxxx xx xx):\n");
    for(int i=0;i<N;i++)
    {
        scanf("%d %s %f",&stu[i].num,stu[i].name,&stu[i].socre);
        getchar();
    }

    //写入text1
    write(file1,fp,stu);

    //排序成绩
    Student *stu2;
    stu2 = sort(stu);

    //写入text2
     write(file2,fp,stu);

    system("pause");
}

猜你喜欢

转载自www.cnblogs.com/huxiaobai/p/10205152.html