程序编译错误,不知道怎么弄

img


题目如上,编程写了一半,但是编译错误,找不出哪里错了,教教我,排序,插入,混一起不知道如何编程

编译错误,你的代码呢

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_STUDENTS 100 // 最大学生数量
#define MAX_NAME_LEN 20 // 姓名最大长度
#define FILENAME_LEN 30 // 文件名最大长度

// 学生信息结构体类型
typedef struct StudentInfo
{
    char id[10]; // 学号
    char name[MAX_NAME_LEN]; // 名字
    int chi, math, eng; // 语文、数学、英语成绩
    float avg; // 平均分
} StudentInfo;

StudentInfo students[MAX_STUDENTS]; // 存储所有学生信息的数组
int studentCount = 0; // 学生数量

// 自定义函数声明
void printMenu();
void inputStudentInfo();
void displayAllStudentInfo();
int findStudentById(char id[]);
void sortByName();
void insertStudentInfo(int index);
void saveToFile(char filename[]);
void readFromFile(char filename[]);

int main()
{
    int choice;
    char saveFilename[FILENAME_LEN+1];

    printf("Welcome to the student grade management system!\n");
    while (1)
    {
        printMenu();
        printf("Please select an option: ");
        scanf("%d", &choice);
        fflush(stdin); //清空输入缓冲区

        switch (choice)
        {
            case 1:
                inputStudentInfo();
                break;
            case 2:
                displayAllStudentInfo();
                break;
            case 3:
                {
                    char searchId[10];
                    int index;
                    printf("Enter a student id to search: ");
                    scanf("%s", searchId);
                    fflush(stdin);
                    index = findStudentById(searchId);
                    if (index == -1)
                    {
                        printf("Student not found!\n");
                    }
                    else
                    {
                        printf("Student found:\n");
                        printf("%s %s %d %d %d %.2f", students[index].id, students[index].name,
                               students[index].chi, students[index].math, students[index].eng, students[index].avg);
                    }
                }
                break;
            case 4:
                sortByName();
                printf("Students sorted by name.\n");
                break;
            case 5:
                {
                    int index;
                    printf("Enter the position to insert (1-%d): ", studentCount+1);
                    scanf("%d", &index);
                    fflush(stdin);
                    if (index < 1 || index > studentCount+1)
                    {
                        printf("Invalid position!\n");
                    }
                    else
                    {
                        insertStudentInfo(index-1);
                        printf("Student inserted.\n");
                    }
                }
                break;
            case 6:
                printf("Enter a filename to save: ");
                scanf("%s", saveFilename);
                fflush(stdin);
                saveToFile(saveFilename);
                printf("Student grades saved to file.\n");
                break;
            case 7:
                printf("Enter a filename to load: ");
                scanf("%s", saveFilename);
                fflush(stdin);
                readFromFile(saveFilename);
                printf("Student grades loaded from file.\n");
                break;
            case 0:
                printf("Thank you for using the student grade management system! Goodbye.\n");
                exit(0);
                break;
            default:
                printf("Invalid choice! Please enter a valid number.\n");
                break;
        }

        printf("\n");
    }
}

void printMenu()
{
    printf("-------------------------------------------------------\n");
    printf("Enter 1 to input student info.\n");
    printf("Enter 2 to display all student info.\n");
    printf("Enter 3 to search student by id.\n");
    printf("Enter 4 to sort students by name.\n");
    printf("Enter 5 to insert student info.\n");
    printf("Enter 6 to save student info to a file.\n");
    printf("Enter 7 to load student info from a file.\n");
    printf("Enter 0 to exit the program.\n");
    printf("-------------------------------------------------------\n");
}

void inputStudentInfo()
{
    int i, n;
    printf("Enter the number of students to input: ");
    scanf("%d", &n);
    fflush(stdin);

    for (i = 0; i < n && studentCount < MAX_STUDENTS; i++)
    {
        StudentInfo st;
        printf("Enter student id, name, and grades (chi math eng): ");
        scanf("%s %s %d %d %d", st.id, st.name, &st.chi, &st.math, &st.eng);
        fflush(stdin);
        st.avg = (st.chi + st.math + st.eng) / 3.0;
        students[studentCount] = st;
        studentCount++;
    }
}

void displayAllStudentInfo()
{
    int i;
    printf("%-10s %-20s %-10s %-10s %-10s %-10s", "ID", "Name", "Chinese", "Math", "English", "Average");
    for (i = 0; i < studentCount; i++)
    {
        printf("%-10s %-20s %-10d %-10d %-10d %-10.2f", students[i].id, students[i].name,
               students[i].chi, students[i].math, students[i].eng, students[i].avg);
    }
}

int findStudentById(char id[])
{
    int i;
    for (i = 0; i < studentCount; i++)
    {
        if (strcmp(students[i].id, id) == 0)
        {
            return i;
        }
    }
    return -1;
}

void sortByName()
{
    int i, j;
    for (i = 0; i < studentCount-1; i++)
    {
        for (j = i+1; j < studentCount; j++)
        {
            if (strcmp(students[i].name, students[j].name) > 0)
            {
                StudentInfo temp = students[i];
                students[i] = students[j];
                students[j] = temp;
            }
        }
    }
}

void insertStudentInfo(int index)
{
    StudentInfo st;
    printf("Enter student id, name, and grades (chi math eng): ");
    scanf("%s %s %d %d %d", st.id, st.name, &st.chi, &st.math, &st.eng);
    fflush(stdin);
    st.avg = (st.chi + st.math + st.eng) / 3.0;

    if (studentCount == MAX_STUDENTS)
    {
        printf("No more space for new students!\n");
        return;
    }

    int i;
    for (i = studentCount-1; i >= index; i--)
    {
        students[i+1] = students[i];
    }
    students[index] = st;
    studentCount++;
}

void saveToFile(char filename[])
{
    FILE *fp;
    int i;
    fp = fopen(filename, "w");

    fprintf(fp, "%d", studentCount);
    for (i = 0; i < studentCount; i++)
    {
        fprintf(fp, "%s %s %d %d %d %.2f", students[i].id, students[i].name,
                students[i].chi, students[i].math, students[i].eng, students[i].avg);
    }

    fclose(fp);
}

void readFromFile(char filename[])
{
    FILE *fp;
    int i;

    fp = fopen(filename, "r");
    if(fp == NULL)
    {
        printf("Error: cannot open file \"%s\".\n", filename);
        return;
    }

    fscanf(fp, "%d", &studentCount);
    for (i = 0; i < studentCount; i++)
    {
        StudentInfo st;
        fscanf(fp, "%s %s %d %d %d %f", st.id, st.name, &st.chi, &st.math, &st.eng, &st.avg);
        students[i] = st;
    }

    fclose(fp);
}