#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终止了,但还是继续往下进行了两次?
应该怎么改呢?
代码中的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;
}
运行结果