设计一个学生和试题管理系统。其中学生信息包括学号、姓名、班级、每门课程的积分和等级等信息;课程信息包括课程编号、课程名称、测试试题等信息;试题信息成功完成该测试试题能获得的积分等信息。


#include <stdio.h>
#include <stdlib.h>
#define N 1000
struct Student {
    char num[20];//学号
    char name[20];//姓名
    char class[20];//班级
    int scores[5];//该生在五门课程中所获得的积分
    int levels[5];//五门课程的等级
}stu_information[N];
struct Course {
    int num;//课程编号
    char name[20];//课程名称
    int item[1000];//完成相应试题所获取的分值,假设每门课程最多包括1000道试题
};
int main()
{
    void Welcome();
    while (1) {
        Welcome();
        char num;//num为起初选择的数字
        num = getchar();
        switch (num) {
        case'1':InputStudent(); break;//输入班级,学号,姓名,以逗号分离隔开
        case'2':printf("the calculating have been ended.Press any key to continue..."); break;//计算已结束,按任意键继续
        case'3': {
            printf("     class   number   name   score1   score2   score3   score4   score5   average ");
            printf("\n\n\n                          Press any key to continue..."); break;
        }
        case'4': {
            printf("                                          Sorted information is:\n");//排序后的信息是
            printf("   class   number   name   score1   score2   score3   score4   score5   average\n\n\n\n");
            printf("                                Press any key to continue..."); break;
        }
        case'5': { system("cls");
            printf("\n\n\n                     Please input class number:"); break;
        }
        case'6':printf("Please input class,number,name,seperated by 'Enter'"); break;
        case'0': {printf("Thanks for using!\n"); break;
        }
        }
    }
    return 0;
}
void Welcome()//进入欢迎使用界面
{
    printf("\n\n\n\n\n\n");
    printf("                              |******Student Grade Management System******|\n");//学生成绩管理系统
    printf("                              |-------------------------------------------|\n");
    printf("                              |   Please  input  your  choose( 0--6 ):    |\n");//请输入你的选择(0--6)
    printf("                              |-------------------------------------------|\n");
    printf("                              |    1----input student's grades            |\n");//录入学生的成绩
    printf("                              |    2----calculate the average value       |\n");//计算平均值
    printf("                              |    3----output original grades            |\n");//输出原始成绩
    printf("                              |    4----sort by average value             |\n");//按平均值排序
    printf("                              |    5----modify the student's grade        |\n");//更改学生成绩
    printf("                              |    6----add the student's grade           |\n");//添加学生成绩
    printf("                              |    0----exit the system                   |\n");//退出系统
    printf("                              |-------------------------------------------|\n");
}
void student_information()//定义学生信息
{
    int i;
    scanf("%d,%d,%d",&stu_information[i].class,&stu_information[i].num,&stu_information[i].name);
}
void InputStudent()//录入学生信息
{
    printf("input class,number,name,seperated by ‘ ,’");
}

为什么代码里的while循环用break终止了,但还是继续往下进行了两次?
应该怎么改呢?

img

代码中的break是结束switch的,while一直没有结束。
后面的两次输出,第一次是由于前一次接收0后while没有结束继续执行后新的一次循环执行Welcome()输出的,然后getchar又接收0之后的回车(打断点可以看到值为10(换行符)),执行switch结束后又进入新的循环,此时缓冲区中空,需要等待下一次输入所以程序停在了等待输入的语句上。

解决方法是在switch后再加判断输入是否为‘0’,为0则退出while循环。


#include <stdio.h>
#include <stdlib.h>
#define N 1000
struct Student {
    char num[20];//学号
    char name[20];//姓名
    char className[20];//班级
    int scores[5];//该生在五门课程中所获得的积分
    int levels[5];//五门课程的等级
}stu_information[N];
struct Course {
    int num;//课程编号
    char name[20];//课程名称
    int item[1000];//完成相应试题所获取的分值,假设每门课程最多包括1000道试题
};

void Welcome()//进入欢迎使用界面
{
    printf("\n\n\n\n\n\n");
    printf("                              |******Student Grade Management System******|\n");//学生成绩管理系统
    printf("                              |-------------------------------------------|\n");
    printf("                              |   Please  input  your  choose( 0--6 ):    |\n");//请输入你的选择(0--6)
    printf("                              |-------------------------------------------|\n");
    printf("                              |    1----input student's grades            |\n");//录入学生的成绩
    printf("                              |    2----calculate the average value       |\n");//计算平均值
    printf("                              |    3----output original grades            |\n");//输出原始成绩
    printf("                              |    4----sort by average value             |\n");//按平均值排序
    printf("                              |    5----modify the student's grade        |\n");//更改学生成绩
    printf("                              |    6----add the student's grade           |\n");//添加学生成绩
    printf("                              |    0----exit the system                   |\n");//退出系统
    printf("                              |-------------------------------------------|\n");
}
void student_information()//定义学生信息
{
    int i;
    scanf("%d,%d,%d",&stu_information[i].className,&stu_information[i].num,&stu_information[i].name);
}
void InputStudent()//录入学生信息
{
    printf("input className,number,name,seperated by ‘ ,’");
}
int main()
{
    //void Welcome();
    while (1) {
        Welcome();
        char num;//num为起初选择的数字
        num = getchar();
        switch (num) {
            case'1':InputStudent(); break;//输入班级,学号,姓名,以逗号分离隔开
            case'2':printf("the calculating have been ended.Press any key to continue..."); break;//计算已结束,按任意键继续
            case'3': {
                printf("     className   number   name   score1   score2   score3   score4   score5   average ");
                printf("\n\n\n                          Press any key to continue..."); break;
            }
            case'4': {
                printf("                                          Sorted information is:\n");//排序后的信息是
                printf("   className   number   name   score1   score2   score3   score4   score5   average\n\n\n\n");
                printf("                                Press any key to continue..."); break;
            }
            case'5': { system("cls");
                printf("\n\n\n                     Please input className number:"); break;
            }
            case'6':printf("Please input className,number,name,seperated by 'Enter'"); break;
            case'0': {printf("Thanks for using!\n"); break;
            }
        }
        if(num == '0') break;    // 新增代码
    }
    return 0;
}

运行结果

img