回 帖 发 新 帖 刷新版面

主题:为什么排不了序

#include<stdio.h>
struct student
{
    int num;
    char name[10];
    float score[3];
    float total[5];
    float ave[5];
}stu[5], temp;
void write()
{
    int i;
    for(i=0;i<5;i++)
    {
        scanf("%s%d%f%f%f",stu[i].name,&stu[i].num,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
        stu[i].total[i]=stu[i].score[0]+stu[i].score[1]+stu[i].score[2];
        stu[i].ave[i]=stu[i].total[i]/3;
    }
    FILE *fp;
    if((fp=fopen("stu","wb"))==NULL)
    {
        printf("cannot open file\n");
        return ;
    }
    for(i=0;i<5;i++)
        if (fwrite(&stu[i],sizeof(struct student),1,fp)!=1);
        printf("file write error\n");
        fclose(fp);
        fp=fopen("stu","rb");
        for(i=0;i<5;i++)
        {
            fread(&stu[i],sizeof(struct student),1,fp);
            printf("%s\t%d\t%.2f\t%.2f\t%.2f\t%.2f\n",stu[i].name,stu[i].num,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].ave[i]);
        }
        fclose(fp);
}
void sort()
{
    int j=0,i;FILE *fp;
    if((fp=fopen("stu","wb"))==NULL)
    {
        printf("cannot open file\n");
        return ;
    }
    for(i=0;i<5;i++)
        if (fwrite(&stu[i],sizeof(struct student),1,fp)!=1);
        printf("file write error\n");
        fclose(fp);
        for(i=0;i<5;i++)
        {
            for(j=i+1;j<5;j++)
                if (stu[i].ave<stu[j].ave)
                {   
                    temp=stu[i];
                    stu[i]=stu[j];
                    stu[j]=temp;
                }
        }
        printf("排序后的成绩是\n");
        fp=fopen("stu","rb");
        for(i=0;i<5;i++)
        {
            fread(&stu[i],sizeof(struct student),1,fp);
            printf("%s\t%d\t%.2f\t%.2f\t%.2f\t%.2f\n",stu[i].name,stu[i].num,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].ave[i]);
        }
        fclose(fp);
}



void main()
{

    printf("请输入五名学生的三门成绩\n");
    
    
    
    write();
    sort();
}

回复列表 (共5个回复)

沙发

sort函数里fread和fwrite两句换过来再试试……

板凳

运行结果是这样的:

请输入五名学生的三门成绩
wu 1 99 96 97
wang 2 96 99 98
chen 3 86 88 89
huang 4 98 99 90
ma 5 97 96 94
wu      1       99.00   96.00   97.00   97.33
wang    2       96.00   99.00   98.00   97.67
chen    3       86.00   88.00   89.00   87.67
huang   4       98.00   99.00   90.00   95.67
ma      5       97.00   96.00   94.00   95.67
排序后的成绩是
ma      5       97.00   96.00   94.00   0.00
huang   4       98.00   99.00   90.00   0.00
chen    3       86.00   88.00   89.00   87.67
wang    2       96.00   99.00   98.00   0.00
wu      1       99.00   96.00   97.00   0.00
Press any key to continue
该怎么该程序呀?

3 楼

文件打开方式上相应要改过来,其实数据结构有点问题,total和ave完全不用数组的

4 楼

代碼太長了...不想看...

5 楼

改好了,可以运行了,谢谢~

我来回复

您尚未登录,请登录后再回复。点此登录或注册