输出有问题不知道问题在哪

img


读出所有学生的name和english、math成绩并按总分由高到低的顺序输出每个学生的数据。若总分相同,english分数高的排前。

img


这是用winhex打开后

img


运行结果

img


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct
{
 char bz;
 char time[3];
 int jls;
 short zcd;
 short jlcd;
 char empty[20];    
}HEAD;
typedef  struct
{
    char ename[10];
    char k;
    char elx;
    int ewz;
    char ecd;
    char ews;
    char ek[14];
}E;
typedef  struct
{
    char fname[15];
    float math;
    float english;
    float computer;
    float zf;
}F;
int main()
{
    FILE *p;
    int i,j,n,n1,n2=0;
    char flag,name[15]="0",fen[10]="0";
    HEAD h;
    E e[5];
    F f[10],t;
    long x;
    scanf("%d",&n);
    if(n==1)
    {
        if((p=fopen("aaa.dic","rb"))==NULL)
            exit(1);
    }
    if(n==2)
    {
        if((p=fopen("bbb.dic","rb"))==NULL)
            exit(1);
    }
    if(n==3)
    {
        if((p=fopen("ccc.dic","rb"))==NULL)
            exit(1);
    }
    fread(&h,32,1,p);
    n1=(h.zcd-33)/32;
    for(i=0;i<n1;i++)
    {
        fread(e,32,1,p);
        if(strcmp(e[0].ename ,"name")==0);
        {
            e[1]=e[0];
        }
        if(strcmp(e[0].ename ,"math")==0)
        {
            e[2]=e[0];
        }
        if(strcmp(e[0].ename ,"english")==0)
        {
            e[3]=e[0];
        }
        if(strcmp(e[0].ename ,"computer")==0)
        {
            e[4]=e[0];
        }
    }
    fseek(p,h.zcd,0);
    for(i=0;i<h.jls;i++)
    {
        fread(flag,1,1,p);
        fseek(p,-1,1);
        if(flag=='*')
        {
            fseek(p,h.jlcd,1);
            continue;
        }
        else
        {
            fseek(p,e[1].ews,1);
            fread(name,e[1].ecd,1,p);
            name[e[1].ecd]=0;
            for(j=e[1].ecd;j>-1;j--)
            {
                if(name[j]==' '||name[j]==0)
                name[j]=0;
                else
                break;
            }
            strcpy(f[n2].fname,name);    
            fseek(p,-(e[1].ews+e[1].ecd),1);
            fseek(p,e[2].ews,1);
            fread(fen,e[2].ecd,1,p);
            f[n2].math=(float)atof(fen);
            fseek(p,-(e[2].ews+e[2].ecd),1);
            fseek(p,e[3].ews,1);
            fread(fen,e[3].ecd,1,p);
            f[n2].english=(float)atof(fen);
            fseek(p,-(e[3].ews+e[3].ecd),1);
            fseek(p,e[4].ews,1);
            fread(fen,e[4].ecd,1,p);
            f[n2].computer=(float)atof(fen);
            fseek(p,-(e[4].ews+e[4].ecd),1);
            f[n2].zf=f[n2].math+f[n2].english+f[n2].computer;
            fseek(p,h.jlcd,1);
            n2++;
        }
    }
    
     for(j=0;j<n2;j++)
     {
         for(i=0;i<n2;i++)
         {
             if(f[i].zf<f[i+1].zf)
             {
                 t=f[i];
                 f[i]=f[i+1];
                 f[i+1]=t;
            }
            if(f[i].zf==f[i+1].zf)
            {
                if(f[i].english<f[i+1].english)
                {
                    t=f[i];
                     f[i]=f[i+1];
                     f[i+1]=t;
                }
            }
        }
     }
     for(i=0;i<n2;i++)
    printf("%s %.2f %.2f %.2f %.2f\n",f[i].fname,f[i].math,f[i].english,f[i].computer,f[i].zf);
    fclose(p);
    return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    我可以回答这个问题,但是目前还没有看到具体的问题。请提供详细的问题描述,我将尽力提供解决方案。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^