这个程序(成绩排名)运行为什么没结果?

#include<stdio.h>
#define NUM 3
struct student_score
{
char name[10];
int sum;
int rank;
}stu[3];
void fun(int p,int n)/选择排序/
{
int i,j,k,temp;
for(i=0;i<n;i++)
{ for(j=i+1;j<n;j++)
{ if(
(p+i)<(p+j))
{temp=
(p+i);(p+i)=(p+j);*(p+j)=temp;}}
} }

int main()
{int i,a[NUM],j=0;
for(i=0;i<NUM;i++)
scanf("%s %d",&stu[i].name,&stu[i].sum);
for(i=0;i<NUM;i++)
a[i]=stu[i].sum;
fun(a,NUM);
while(a[j]!='\0')
{
for(i=0;i<NUM;i++)
if(stu[i].sum==a[j])
{stu[i].rank=j+1;j++;}
}
for(i=0;i<NUM;i++)
printf("%s %d %d\n",stu[i].name,stu[i].sum,stu[i].rank);
}

img


修改写注释里了,有问题请回复

#include<stdio.h>
#define NUM 3
struct student_score
{
    char name[10];
    int sum;
    int rank;
} stu[3];
void fun(int *p,int n)//应该为冒泡排序
{
    int i,j,k,temp;
    for(i=0; i<n; i++)
    {
        for(j=i+1; j<n; j++)
        {
            if(*(p+i)<*(p+j))
            {
                temp=*(p+j);
                *(p+j)=*(p+i);
                *(p+i)=temp;
            }
        }
    }
}
int main()
{   int i,a[NUM],j=0;
    for(i=0; i<NUM; i++)
        scanf("%s%d",stu[i].name,&stu[i].sum);
        //scanf空格去掉,输入字符串不用&
    for(i=0; i<NUM; i++)
        a[i]=stu[i].sum;
    fun(a,NUM);
    while(j<NUM)
    {
        for(i=0; i<NUM; i++)
            if(stu[i].sum==a[j])
            {
                stu[i].rank=j+1;
            }
        j++;//j++放for循环外面
    }
    for(i=0; i<NUM; i++)
        printf("%s %d %d\n",stu[i].name,stu[i].sum,stu[i].rank);
}

#include<stdio.h>
#include<bits/stdc++.h>
#define NUM 3
using namespace std;
struct student_score
{
char name[10];
int sum;
int rank;
}stu[3];
void fun(int p[],int n)//参数错了  是数组的第一个元素的地址,类似指针操作
{
int i,j,k,temp;
for(i=0;i<n;i++)
    { 
        for(j=i+1;j<n;j++)

        {     
            if(*(p+i)<*(p+j)){temp=*(p+i);*(p+i)=*(p+j);*(p+j)=temp;}    
        }
    } 
}

int main()
{int i,a[NUM],j=0;
for(i=0;i<NUM;i++)
scanf("%s %d",&stu[i].name,&stu[i].sum);
for(i=0;i<NUM;i++)
a[i]=stu[i].sum;
fun(a,NUM);
//for(int i=0;i<NUM;i++){
//    cout<<a[i];
//}
while(j<3)
{
for(i=0;i<NUM;i++)
if(stu[i].sum==a[j])
{stu[i].rank=j+1;j++;}
}
for(i=0;i<NUM;i++)
printf("%s %d %d\n",stu[i].name,stu[i].sum,stu[i].rank);
}

void fun(int p,int n)改成void fun(int p[], int n)

函数的参数错了
void fun(int p,int n)改成void fun(int p[], int n)

函数的参数写错了void fun(int p,int n)改成void fun(int p[], int n)