初学者成绩排序没用,不知道哪里有问题

关于排序那块部分,不知道因为什么,就是没用,可以运行但是不会排序
初学者

#include <stdio.h>
#include <string.h>
#define N 5
struct student
     {
         char id[12],name[20],class[25];
         int sex,score;
          
     }stu[5];
    
void inputstudent();
void querystudent();
void deletestudent();
void sortstudent();
int sex;
     void inputstudent()
     {  
         {int i=0;
         while(i<5){
                       printf("请输入第%d个学生的信息:\n",i+1);
                       printf("学号:");
                        do  {
                             scanf("%s",stu[i].id);
                             if(strlen(stu[i].id)!=1) {
                               printf("请重新输入学号共12位!\n");
                           }
                         }while(strlen(stu[i].id)!=1);
            
                       printf("姓名:");
                        do {
                             scanf("%s",stu[i].name);
                             if(strlen(stu[i].name)>20) {
                               printf("请重新输入姓名拼音不超过20位!\n");
                           }
                         }while(strlen(stu[i].name)>12);
            
                       printf("班级:");
                        do {
                             scanf("%s",stu[i].class);
                             if(strlen(stu[i].class)>25) {
                                printf("请重新输入班级拼音不超过25位!\n");
                           }
                         }while(strlen(stu[i].class)>25);  
             
                           printf("性别(0:女,1:男):");
                             do {
                             scanf("%d", &stu[i].sex);
                             if(stu[i].sex != 0 && stu[i].sex != 1) {
                             printf("请重新输入性别只能输入0或1!\n");
                            }
                         } while(stu[i].sex != 0 && stu[i].sex != 1);
          
                            printf("分数:");
                             do {
                                  scanf("%d",&stu[i].score);
                                   if(stu[i].score<0||stu[i].score>100) {
                 
                                    printf("请重新输入分数应在0~100!\n");
                                 }     
                              }while(stu[i].score<0||stu[i].score>100);
            
            printf("录入成功!\n");i++;} 
            }
       }
     
     void querystudent(){
        int i,choice;
        char num[12];
        char mingzi[20];
        printf("请选择你查询成绩方式:\n1.姓名\n2.学号");
        scanf("%d",&choice);
           if(choice==1){
            printf("输入名字:");
             scanf("%s",mingzi);{
            for(i=0;i<5;i++){
                if(strcmp(mingzi,stu[i].name)==0){
                    printf("姓名:%s\n",stu[i].name);
                    printf("学号:%s\n",stu[i].id);
                    printf("班级:%s\n",stu[i].class);
                    printf("性别:%d\n",stu[i].sex);
                    printf("C语音成绩:%d\n",stu[i].score);
                    break;
                 }
                if(strcmp(mingzi,stu[0].name)!= 0&&strcmp(mingzi, stu[1].name) != 0&&strcmp(mingzi, stu[2].name) != 0&&strcmp(mingzi, stu[3].name) != 0&&strcmp(mingzi, stu[4].name) != 0) 
            {
                printf("输入错误,请重新输入\n");}
            }}
        } 
          if(choice==2){
                printf("输入学号:");
              scanf("%s",num);{
              for(i=0;i<5;i++){
                if(strcmp(num,stu[i].id)==0){
                    printf("姓名:%s\n",stu[i].name);
                    printf("学号:%s\n",stu[i].id);
                    printf("班级:%s\n",stu[i].class);
                    printf("性别:%d\n",stu[i].sex);
                    printf("C语音成绩:%d\n",stu[i].score);
                    break;
                 }
                if(strcmp(num,stu[0].id)!= 0&&strcmp(num, stu[1].id) != 0&&strcmp(num, stu[2].id) != 0&&strcmp(num, stu[3].id) != 0&&strcmp(num, stu[4].id) != 0) 
            {
                printf("输入错误,请重新输入\n");}
            }}
          }
       
    }
void deletestudent(){
                 char num[12];
                 int i=0,j;
                 printf("请输入你要删除的学生学号:");
                 scanf("%s",num);
                 for(i=0;i<5;i++){
                     if(strcmp(num,stu[i].id)==0){
                          for(;i<4;i++) {
                         stu[i]=stu[i+1];
            }
            i--;
            printf("删除成功!\n");
            return;
        }
    }
    printf("没有找到该学生的信息!\n");
}

void sortstudent(){
       struct student temp;
       int i=0,j=0;
       for(i=0;i<4;i++){
              for(i=0;i<3;i++){
                     if(stu[i].score<stu[i].score)
                     {
                           temp=stu[i];
                           stu[i]=stu[i+1];
                           stu[i+1]=temp;
                     }
              }
       } 
       printf("成绩从高到低排序为:\n");
       for(i=0;i<5;i++){
           printf("%s  %d\n",stu[i].name,stu[i].score);
       }
}
int main()
     {    
     while(1){
      printf("欢迎来到学生成绩管理系统!\n");
      printf("1.录入学生信息与成绩\n");
      printf("2.查询学生信息与成绩\n");
      printf("3.删除学生信息与成绩\n");
      printf("4.排序学生信息与成绩\n");
      printf("\n请选择您要进行的功能(1~4):\n");
       int num=0;
       scanf("%d",&num);
           switch(num)
         {
            case 1:inputstudent();
            break;
            case 2:querystudent();
            break;
            case 3:deletestudent();
            break;
            case 4:sortstudent();
            break; 
             } printf("是否还要继续操作?(yes=1/no=2)");
         scanf("%d",&num);
         if(num==2) {
         break;}
         }
     return 0;
     }

你 sort 函数里 两个循环都使用了 i, 应该是外循环用 i 内循环用 j 比较时用 i和j,你搜一搜冒泡排序

你循环内外两层变量全是i,i很快就溢出,然后for循环就结束了
再说stu[i].score<stu[i].score自己怎么可能小于自己呢
内层换成j

感谢