感谢各位大佬拔刀相助!!!
我在写一个学生信息管理系统的源代码(一个大一的期末作业呀)
》问题是:我在用dev-C++写完下面代码运行之后,依次点击键盘的9,enter,r后出现了一个高速循环的情况(如图)
请问各位我要怎么办才能在保持原有功能不被改变的情况下避免这个情况呀?
》源代码如下:
//头文件的导入
#include <stdio.h>
#include <string.h>
//定义
#define MAX_STUDENTS 100
//结构体的定义 ok
struct Student {
char name[20];//姓名
int studentId;//学号
char gender[10];//性别
int age;//年龄
char className[20];//班级
double score;//成绩
};
//定义变量 ok
struct Student students[MAX_STUDENTS];//定义数组 stduents
int studentCount = 0;//定义变量.学生数量 (以下相同定义变量代码注释同此)
//显示全部学生信息 ok
void displayStudents() {//定义函数displayStudents (以下相同定义代码注释同此)
if (studentCount == 0) {//判断是否有学生(以下相同代码注释同此)
printf("暂无学生信息\n");
return;
}
printf("------------------------------\n");//打印标题
printf("姓名\t学号\t性别\t年龄\t班级\t成绩\n");
printf("------------------------------\n");
for (int i = 0; i < studentCount; i++) {//循环打印所有学生信息
struct Student student = students[i];
printf("%s\t%d\t%s\t%d\t%s\t%.2f\n", student.name, student.studentId, student.gender, student.age, student.className, student.score);
}
printf("------------------------------\n");//分割线
}
//检索学生信息
int isStudentExists(int studentId) {//检索学生信息(以下相同的检索代码注释同此)
for (int i = 0; i < studentCount; i++) {
if (students[i].studentId == studentId) {
return 1;
}
}
return 0;
}
//增加学生信息 ok
void addStudent() {
if (studentCount >= MAX_STUDENTS) { //判断是否可加
printf("学生数量已满,无法添加新学生。\n");
return;
}
struct Student newStudent;
printf("请输入学生的姓名:");
scanf("%s", newStudent.name);
printf("请输入学生的学号:");
scanf("%d", &newStudent.studentId);
if (isStudentExists(newStudent.studentId)) {//防止学号重复
printf("学号已存在,请重新输入学生的学号。\n");
return;
}
printf("请输入学生的性别:");
scanf("%s", newStudent.gender);
printf("请输入学生的年龄:");
scanf("%d", &newStudent.age);
printf("请输入学生的班级:");
scanf("%s", newStudent.className);
printf("请输入学生的成绩:");
scanf("%lf", &newStudent.score);
students[studentCount] = newStudent;//将新学生的信息添加到数组students
studentCount++;//学生总数加一
printf("学生信息添加成功。\n");
}
//删除学生信息 ok
void deleteStudent() {
if (studentCount == 0) {//判断是否有相应学生可供删除
printf("暂无学生信息,无法删除学生。\n");
return;
}
int studentId;
printf("请输入要删除的学生学号:");
scanf("%d", &studentId);
int index = -1;
for (int i = 0; i < studentCount; i++) {//检索相应学号的学生信息
if (students[i].studentId == studentId) {
index = i;
break;
}
}
if (index == -1) {//判断是否能删除
printf("未找到该学生学号的学生。\n");
} else {
for (int i = index; i < studentCount - 1; i++) {
students[i] = students[i + 1];
}
studentCount--;
printf("学生信息删除成功。\n");
}
}
//修改学生信息 ok
void modifyStudent() {
if (studentCount == 0) {
printf("暂无学生信息,无法修改学生。\n");
return;
}
int studentId;
printf("请输入要修改的学生学号:");
scanf("%d", &studentId);
int index = -1;
for (int i = 0; i < studentCount; i++) {
if (students[i].studentId == studentId) {//用于判断数组中第i个学生的学号与输入的学号是否相同
index = i;
break;
}
}
if (index == -1) {
printf("未找到该学生学号的学生。\n");
} else {//输入更改信息
printf("请输入学生的新姓名:");
scanf("%s", students[index].name);
printf("请输入学生的新性别:");
scanf("%s", students[index].gender);
printf("请输入学生的新年龄:");
scanf("%d", &students[index].age);
printf("请输入学生的新班级:");
scanf("%s", students[index].className);
printf("请输入学生的新成绩:");
scanf("%lf", &students[index].score);
printf("学生信息修改成功。\n");
}
}
//查询学生信息 ok
void searchStudent() {
if (studentCount == 0) {
printf("暂无学生信息,无法查询学生。\n");
return;
}
int studentId;
printf("请输入要查询的学生学号:");
scanf("%d", &studentId);
int index = -1;
for (int i = 0; i < studentCount; i++) {
if (students[i].studentId == studentId) {
index = i;
break;
}
}
if (index == -1) {
printf("未找到该学生学号的学生。\n");
} else {
printf("姓名\t学号\t性别\t年龄\t班级\t成绩\n");
struct Student student = students[index];
printf("%s\t%d\t%s\t%d\t%s\t%.2f\n", student.name, student.studentId, student.gender, student.age, student.className, student.score);
}
}
//按学生成绩从高到低排序并显示成绩单 ok
void sortStudentsByScore() {
if (studentCount == 0) {
printf("暂无学生信息,无法排序学生成绩。\n");
return;
}
struct Student temp;
for (int i = 0; i < studentCount - 1; i++) {
for (int j = 0; j < studentCount - i - 1; j++) {
if (students[j].score < students[j + 1].score) {
temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
printf("学生成绩从高到低排序成功。\n");
printf("------------------------------\n");
printf("姓名\t学号\t性别\t年龄\t班级\t成绩\n");
printf("------------------------------\n");
for (int i = 0; i < studentCount; i++) {
struct Student student = students[i];
printf("%s\t%d\t%s\t%d\t%s\t%.2f\n", student.name, student.studentId, student.gender, student.age, student.className, student.score);
}
printf("------------------------------\n");
}
//统计学生总数 ok
void countStudents() {
printf("学生总数:%d\n", studentCount);//打印学生总数
}
//主函数 ok
int main() {//主函数声明
int choice;//定义变量
while (1) {//无限循环
printf("学生管理系统\n");//系统功能菜单
printf("1.显示全部学生信息\n");
printf("2.增加学生信息\n");
printf("3.删除学生信息\n");
printf("4.修改学生信息\n");
printf("5.查询学生信息\n");
printf("6.统计学生总数\n");
printf("7.按学生成绩从高到低排序并显示成绩单\n");
printf("0.退出\n");
printf("请输入操作选项:");
scanf("%d", &choice);//输入用户选项
switch (choice) {//执行用户选项
case 1:
displayStudents();
break;
case 2:
addStudent();
break;
case 3:
deleteStudent();
break;
case 4:
modifyStudent();
break;
case 5:
searchStudent();
break;
case 6:
countStudents();
break;
case 7:
sortStudentsByScore();
break;
case 0:
return 0;
default:
printf("无效的选项,请重新输入。\n");
}
}
}