编译错误,你的代码呢
#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);
}