把交换结构的那三行代码放到fun函数if里面即可,即当结构数组前面成员的成绩比后面成员的成绩小时,则交换他们;
然后用结构指针比较成绩时,结构指针前面的解引用*星号去掉即可,因为是使用的->来访问成绩成员,所以可以直接使用指针,而不需要使用解引用的星号。
修改如下:
#include <stdio.h>
struct stu{
int num;
char name[20];
int score;
};
void fun(struct stu *p,int n);
int main(void){
struct stu a[10];
int n,i;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d%s%d",&a[i].num,a[i].name,&a[i].score);
}
fun(a,n);
for(i=0;i<n;i++){
printf("%d %s %d\n",a[i].num,a[i].name,a[i].score);
}
return 0;
}
void fun(struct stu *p,int n){
for(int i=0;i<n-1;i++){
int index=i;
for(int j=i+1;j<n;j++){
if((p+j)->score>(p+index)->score){
struct stu s =*(p+index);
*(p+index)=*(p+j);
*(p+j)=s;
}
}
}
}