我打算做排行榜功能,从文件读入玩家的基本信息并排序但我现在的代码没有进行排序,不知道问题出在哪里了

void list()    //排行榜 
{
    int u,v;
    int s=10;
    struct data
    {
        char name[200];
        char score[20];
        char time1[20];
        char time2[200];
        char kongge[200];
    };

    FILE *fp;
    data n[30]={0};
    struct data temp;
    int i=0;
    fp=fopen("user.txt","r");
    while(i<s)
    {
        fgets(n[i].name,200,fp);
        fgets(n[i].score,200,fp);
        fgets(n[i].time1,20,fp);
        fgets(n[i].time2,200,fp);
        fgets(n[i].kongge,200,fp);
        i++;
       
    }
    u=0;
    for(u=0;u<s-1;u++)      //这里是对游戏时长进行排序的部分
    {
        for(v=u+1;v<s;v++)
        {
            if(n[v].time1>n[v+1].time2)
            {
                temp=n[v];
                n[v]=n[v+1];
                n[v+1]=temp;
            }
        }
    }
    i=0;
    while(i<10)                       //输出前10个排序结果


    {
        setbkmode(TRANSPARENT);//透明
        settextcolor(WHITE);
        settextstyle(20,10,"楷体");
        outtextxy(30,200+35*i,n[i].name);
        settextcolor(RED);
        outtextxy(190,200+35*i,n[i].score);
        settextcolor(GREEN);
        outtextxy(310,200+35*i,n[i].time1);
        settextcolor(GREEN);
        outtextxy(450,200+35*i,n[i].time2);
        i++;
    }
}

是你的排序算法有问题吧。说你用的是选择排序吧,但是你写的又像是冒泡排序。基础还是不能忘呀。

    // 选择排序
    for(u=0;u<s-1;u++)      //这里是对游戏时长进行排序的部分
    {
        for(v=u+1;v<s;v++)
        {
            if(n[v].time1>n[v+1].time2)
            {
                temp=n[u];
                n[u]=n[v];
                n[v]=temp;
            }
        }
    }

 

你要首先确认一下n[i]里面的数据是否准确,先打印出来看看。

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

速戳参与调研>>>https://t.csdnimg.cn/Kf0y