我想根据结构体里面的某一值排序结构体,为什么输出不出来

#include<iostream>
#include<string>
using namespace std;
struct Subject
{
    int math;
    int english;
    int chinese;
};
struct Student
{
    int age;
    string name;
    Subject score;

};
void bubble(Student b[], int len)
{
    for (int i=0; i < len; i++)
    {
        for (int j=0; j < len - i - 1; j++)
        {
            
            if (b[j].score .chinese  > b[j + 1].score .chinese )
            {
                Student temp;
                b[j] = temp;
                b[j] = b[j + 1];
                b[j + 1] = temp;

            }
        }
    }
}
void print(Student s[],int k)
{
    cout << "根据语文成绩排序后的学生排名:" << endl;
    for (int i=0; i < k; i++)
    {
        cout << "姓名:" << s[i].name << "       年龄:" << s[i].age << "    语文   数学   英语成绩:" << s[i].score.chinese << "   " << s[i].score.math << "    " << s[i].score.english << endl;
    }
}

int main()
{
    Student a[3] =
    {
        {18,"张三",{80,90,100}},
        {19, "李四", {99, 99, 99}},
        {20,"王五",{77,77,77}},
    };
    int len = sizeof(a)/sizeof(a[0]);
    bubble(a, len);
    print(a, len);
    
}

#include<iostream>
#include<string>
using namespace std;

//struct(关键字)+结构体名称 = 结构体类型 
typedef struct Subject
{
    int math;
    int english;
    int chinese;
}Subject;//将结构体类型struct Subject起别名,别名为Subject 

typedef struct Student
{
    int age;
    string name;
    Subject score;//不起别名这里会报错 

}Student;//将结构体类型struct Student起别名,别名为Student

void bubble(Student b[], int len)
{
    for (int i=0; i < len; i++)
    {
        for (int j=0; j < len - i - 1; j++)
        {
            
            if (b[j].score .chinese  > b[j + 1].score .chinese )
            {
                Student temp;
                temp = b[j];//这里你写反了 
                b[j] = b[j + 1];
                b[j + 1] = temp;

            }
        }
    }
}

void print(Student s[],int k)
{
    cout << "根据语文成绩排序后的学生排名:" << endl;
    for (int i = 0; i < k; i++)
    {
        cout << "姓名:" << s[i].name << "       年龄:" << s[i].age << "    语文   数学   英语成绩:" << s[i].score.chinese << "   " << s[i].score.math << "    " << s[i].score.english << endl;
    }
}

int main()
{
    Student a[3] =
    {
        {18,"张三",{80,90,100}},
        {19, "李四", {99, 99, 99}},
        {20,"王五",{77,77,77}},
    };//为前面的结构体起别名之后这里才不会报错,
	//不起别名会报Student类型未定义的错误 
    int len = sizeof(a)/sizeof(a[0]);
    bubble(a, len);
    print(a, len);
}