怎么在这里做排序啊。。写不对,求求各位大佬帮忙

`include
struct struct_name
{
char name[20];
char num[20];
float score;
}student[3];
void sort(struct struct_name *p)
{ struct struct_name temp,*p1; int i, j;
printf("lololololol");
for(i=0;i for(j=0;j if(p->score<(p+1)->score){

temp=*p;
*p=*p1;
*p1=temp;
}
p++;
}
}
}

int main()
{
struct_name student [3]={{"Tom","15",97.2},{"Boy","16",98.1},{"Smith","18",99.0}};
sort(student);
int i;
for(i=0;i<3;i++){
printf("姓名:%s\n学号:%s\n成绩:%.1f\n",student[i].name,student[i].num,student[i].score);
}
return 0;
}

排序算法有很多种类,如桶排序,冒泡排序等等,建议可以看一下相关的算法。

你的问题不是在于排序,而是对 student这种结构无法进行排序。

这种情况,你可以对比score的值,对name,num进行交换即可。

比如再排序的过程中要交换score了,同时对name,num进行交换。例如

`char name_tmp[32];
char num_tmp[32];

float score_tmp;
if(p->socre > (p+1)->score)
{
// 交换name
strcpy(name_tmp,p->name);
memset(p->name,0,sizeof(p->name)); //清空原先的名字
strcpy(p->name,(p+1)->name);
memset((p+1)->name,0,sizeof((p+1)->name));
strcpy((p+1)->name,name_tmp);
//交换num
strcpy(num_tmp,p->num);
memset(p->num,0,sizeof(p->num)); //清空原先的num
strcpy(p->num,(p+1)->num);
memset((p+1)->num,0,sizeof((p+1)->num));
strcpy((p+1)->num,num_tmp);
//交换score
score_tmp = p->score;
p->score = (p+1)->score;
(p+1)->score = score_tmp;
}

这样,就搞定了所有要交换的东西了。

for(i=0;i for(j=0;j if(p->score<(p+1)->score){
什么乱七八糟的

直接给你代码吧(排序的时候我用了冒泡法)

#include <stdio.h>
#include <stdlib.h>
struct struct_name
{
    char name[20];
    char num[20];
    float score;
}student[3];
void sort(struct struct_name *p)
{
    struct struct_name temp;
    for(int j=0;j<2;j++)
        for(int i=0;i<2-j;i++)
    if((p+i)->score<(p+i+1)->score)
    {
        temp=*(p+i);
        *(p+i)=*(p+i+1);
       *(p+i+1)=temp;
    }
}
int main()
{
    struct struct_name student[3]={{"Tom","15",97.2},{"Boy","16",98.1},{"Smith","18",99.0}};
    sort(student);
    int i;
    for(i=0;i<3;i++)
    {
        printf("姓名:%s\n学号:%s\n成绩:%.1f\n",student[i].name,student[i].num,student[i].score);
    }
    return 0;
}
运行结果:
姓名:Smith
学号:18
成绩:99.0
姓名:Boy
学号:16
成绩:98.1
姓名:Tom
学号:15
成绩:97.2