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