为什么我的这个代码运行不了嘞?

题目是:
输入多个学生的学号、姓名和成绩,然后输出成绩最高的哪个学生的姓名和学号

输入描述
输入包含多组样例。
每组样例包含一个整数N,代表有N个学生。
接下来N行依次输入每个学生的学号、姓名和成绩。
若N = 0,则表示输入结束,这个样例不需要被处理。

输出描述
对于每组用例,你应当输出这组样例N个学生中成绩最高的学生的姓名和学号,每个输出占一行。

我的解题思路:

img

获取学生信息,以及寻找最高分那里需要修改下吧。

修改如下:


#include <stdio.h>
#include <stdlib.h>
struct stud{
    
    int num;
    char name[20];
    int score;
    
};

int main(void){
    
    int N,i=0,j,max=0,k;
    
    scanf("%d",&N); // 获取学生个数 

    
    // 从输入存储N个学生的信息 
    while(N!=0){
        
            
        // 申请一块可以存储N个学生信息的内存,并让结构指针s指向这块内存 
        struct stud * s = (struct stud *)malloc(sizeof(struct stud)*N);
        i=0;
        while(i<N){
            scanf("%d%s%d",&s[i].num,s[i].name,&s[i].score);
            i++;
        } 
        
        if(N>0){  //如果学生人数大于0,则寻找成绩最高的学生 
    
            max=s[0].score;  // 成绩最高分 初始赋值为第一个学生的成绩 
            k=0;
            
            // 遍历寻找成绩最高的学生的下标 
            for(i=1;i<N;i++){
                if(max<s[i].score){
                    max=s[i].score;
                    k=i;
                //    printf("max=%d,k=%d\n",max,k);
                }
            }
            
            // 打印结果 
            printf("%d %s\n",s[k].num,s[k].name);
        }
        free(s);
        s=NULL;
    
        scanf("%d",&N); // 再次获取学生个数 
    }
    

    
    
    
    
    
    
    return 0;
    
}

img