结构体,冒泡排序为什么这样输出结果是错的?(C语言)

要求 按照降序输出人名和对应的成绩

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct student
{
    char name[11];
    int  score;
} stu[50];
int main()
{
    int n,i,j,t;
    char c[11];
    scanf("%d",&n);
    for(i=0; i<=n-1; i++)
    {
        scanf("%s %d",stu[i].name,&stu[i].score);

    }
    for(i=0; i<=n-2; i++)
    {
        for(j=0; j<=n-2-i; j++)
        {
            if(stu[j+1].score>stu[j].score)
            {
                t=stu[j+1].score;
                stu[j].score=stu[j+1].score;
                stu[j+1].score=t;
                strcpy(c,stu[j].name);
                strcpy(stu[j].name,stu[j+1].name);
                strcpy(stu[j+1].name,c);
            }
        }
    }
    for(i=0; i<=n-1; i++)
    {
        if(i==n-1)
        {
            printf("%s %d",stu[i].name,stu[i].score);
        }
        else
        {
            printf("%s %d\n",stu[i].name,stu[i].score);
        }
    }
    return 0;
}
```c


img


这里改为

img

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct student
{
    char name[11];
    int  score;
} stu[50];
int main()
{
    int n,i,j,t;
    char c[11];
    scanf("%d",&n);
    for(i=0; i<=n-1; i++)
    {
        scanf("%s %d",stu[i].name,&stu[i].score);
 
    }
    for(i=0; i<=n-2; i++)
    {
        for(j=0; j<=n-2-i; j++)
        {
            if(stu[j+1].score>stu[j].score)
            {
                t=stu[j+1].score;
                stu[j+1].score=stu[j].score;
                stu[j].score=t;
                strcpy(c,stu[j].name);
                strcpy(stu[j].name,stu[j+1].name);
                strcpy(stu[j+1].name,c);
            }
        }
    }
    for(i=0; i<=n-1; i++)
    {
        if(i==n-1)
        {
            printf("%s %d",stu[i].name,stu[i].score);
        }
        else
        {
            printf("%s %d\n",stu[i].name,stu[i].score);
        }
    }
    return 0;
}