c语言写排行榜(只保留前五名的数据)

//思路:当玩家开始游戏的时候,读取一遍文件,将文件里的数据存入score_top的数组中,到时候输出排行榜时候,只需要输出数组就可以了,读取完文件后进行判断,判断文件状态,若空则写入数据,若不空,则排序,后进行判断,判断当前分数是否大于数组中的分数,若小于,则抛弃这个数据,若大于则将最小的那个数据替换掉,并且更新文件
void sort() //冒泡函数,用来将数组里的数据进行从小到大的排序
{
    int temp = 0;
    for (int i = 0; i < 5-1; i++)
    {
        for (int j = 0;j<5-i-1;j++)
        {
            if (score_top[j]<score_top[j+1])
            {
                temp = score_top[j];
                score_top[j] = score_top[j+1];
                score_top[j+1] = temp;
            }
        }     
    }
} 

int prescore() //写入分数
{   
    //先初始化score数组
    read_file();
    FILE *fp=fopen("1.txt","w+"); //重写文件
    int temp = 0;
    if(fp==NULL){ //判断当前文档的状态,如果是空的则向里面添加数据
        fprintf(fp," %s %d\n;",play1.name,play1.score); //写入分数
    }else{
    
    sort(); //否则进行排序
    
    // for (int i = 0; i < 5; i++)  //写入数据之前进行比较,如果写入的数据比排行榜的数据大,则进行替换,若小则不进行操作
    // {
    //     if ((score_top[i] == 0)) //说明这个参数是空 将输入的数据写入文件中
    //     {
    //         score_top[i] = play1.score;
    //         break; //当时出现的错误是没有在完成数据替换之后结束这个循环,导致数组里的数字//被多次覆盖
    //     }
    //     printf("写入后的:%d",score_top[i]);
    // }
    int min = score_top[4];  //当时是没有进行最小值的比较,直接替换的是比当前数据小但不是最小的数据
    printf("min = %d,sc = %d\n",min,score_top[4]);
    if (play1.score>min)
    {
        score_top[4] = play1.score;
    }
    
    sort();
    }
    for (int  i = 0; i < 5; i++)
    {
         printf("排列后的c:%d\n",score_top[i]);
    }
    
    
    for (int  i = 0; i < 5; i++)
    {
        fprintf(fp,"%s %d\n;",play1.name,score_top[i]); //写入分数
        printf("打开成功!\n");  
    }
    // scanf("%s %d")
    // fprintf(fp,"%s %d\n",play1.name,play1.score);
    fclose(fp);
}

void read_file()//读文件的数据 
{
	FILE *fp;
    int temp = 0;
    char name_1[10] = {0};
    int score_1 = 0;
	fp=fopen("1.txt","r");
    fscanf(fp,"%s %d",name_1,&score_1); //将文件里的名字和分数进行分割
    int i = 0;
	while(!feof(fp))	//当文件为空时结束 
	{
        //printf("%s  %d\n",name_1,score_1);//将文件的数据赋值给 a 和 sum 变量,然后在进行输出 
        score_top[i] = score_1;
        fscanf(fp,"%s %d",name_1,&score_1);       
        i++; 
	}
    
	fclose(fp);//关闭文件 
}

但是目前无法完成用户的名字跟随用户的分数一起显示的问题,因为,用户的数据要一直排序,但是用户名怎末匹配呢?难道c中也有map()吗?(......待解决)

  • 7
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值