关于#保留小数#的问题,如何解决?

哪里出问题了?
.通过完成函数完成以下程序代码,输入n,再输入n个学生信息,对学生根据分数从高到低排序(若分数相同则按学号升序排序),依次输出所有学生(分数保留小数点后2位),输入输出示意如下:
4
2107403005 郑洋 男 90
2107403003 杭丹丹 女 88
2107403002 陈可可 女 95
2107403001 赵文清 男 90
2107403002,陈可可,女,95.00
2107403001,赵文清,男,90.00
2107403005,郑洋,男,90.00
2107403003,杭丹丹,女,88.00

#include <stdio.h>
#include <string.h>
#include <malloc.h>
enum SEX {
    GIRL, BOY
};
struct SStudent {
    int num;          //学号 
    char name[20];    //姓名
    SEX sex;          //性别
    float score;      //成绩
};
int Read(SStudent *stu[])
{
    char t[20];
    int n,i;
    scanf("%d",&n);
    *stu=(struct SStudent*)malloc(sizeof(struct SStudent)*n);
    for(i=0;i<n;i++)
    {
        scanf("%d%s%s%f",&(*stu)[i].num,(*stu)[i].name,t,&(*stu)[i].score);
        (*stu)[i].sex=strcmp(t,"男")?GIRL : BOY;
    }
    return n;
}
int Write(SStudent stu[], int n)
{
    int i;
    for(i=0;i<n;i++)
    {printf("%d,%s,%s,%.2lf",stu[i].num,stu[i].name,stu[i].sex,stu[i].score);
    printf("\n");
    }
    return n;
}
void Sort(SStudent stu[], int n)
{
    struct SStudent t;
    int i,j;
    for(i=0;i<n-1;i++)
    for(j=0;j<n-i-1;j++)
     {
         if(stu[j].score<stu[j+1].score) 
         {t=stu[j];
         stu[j]=stu[j+1];
         stu[j+1]=t;
         }
     }
     for(i=0;i<n-1;i++)
          {
              if(stu[i].score==stu[i+1].score) 
             {     if(stu[i].num<stu[i+1].num)
              
              {t=stu[i];
              stu[i]=stu[i+1];
              stu[i+1]=t;
              }
               }
          }
}
int main()
{
    SStudent *a = NULL;
    int n = Read(&a);
    Sort(a, n);
    Write(a, n);
    free(a);
    return 1;
}

sex 你定义的是整形呀,输出 %s 肯定不对, 还不如直接定义 字符数组呢

img

怎么处理性别

修改如下,改动处见注释,供参考:

#include <stdio.h>
#include <string.h>
#include <malloc.h>
enum SEX {
    GIRL, BOY
};
struct SStudent {
    int num;          //学号 
    char name[20];    //姓名
    SEX sex;          //性别
    float score;      //成绩
};
int Read(SStudent* stu[])
{
    char t[20];
    int n, i;
    scanf("%d", &n);
    *stu = (struct SStudent*)malloc(sizeof(struct SStudent) * n);
    for (i = 0; i < n; i++)
    {
        scanf("%d%s%s%f", &(*stu)[i].num, (*stu)[i].name, t, &(*stu)[i].score);
        (*stu)[i].sex = strcmp(t, "男") ? GIRL : BOY;
    }
    return n;
}
int Write(SStudent stu[], int n)
{
    int i;
    for (i = 0; i < n; i++)
    {
        printf("%d,%s,%s,%.2lf", stu[i].num, stu[i].name, stu[i].sex == GIRL ? "女" : "男", stu[i].score); //修改
        //printf("%d,%s,%s,%.2lf",stu[i].num,stu[i].name,stu[i].sex,stu[i].score);
        printf("\n");
    }
    return n;
}
void Sort(SStudent stu[], int n)
{
    struct SStudent t;
    int i, j;
    for (i = 0; i < n - 1; i++)
        for (j = 0; j < n - i - 1; j++)
        {
            if (stu[j].score < stu[j + 1].score ||                               // 修改
                stu[j].score == stu[j + 1].score && stu[j].num > stu[j + 1].num) // 修改
            {
                t = stu[j];
                stu[j] = stu[j + 1];
                stu[j + 1] = t;
            }
        }
    //for (i = 0; i < n - 1; i++)   //修改  以下代码删除
    //{
    //    if (stu[i].score == stu[i + 1].score)
    //    {
    //        if (stu[i].num < stu[i + 1].num)

    //        {
    //            t = stu[i];
    //            stu[i] = stu[i + 1];
    //            stu[i + 1] = t;
    //        }
    //    }
    //}
}
int main()
{
    SStudent* a = NULL;
    int n = Read(&a);
    Sort(a, n);
    Write(a, n);
    free(a);
    return 1;
}