这个是我目前在网上找的和我们上课讲的所结合的,用switch-case实现这个是不是不太好,而且贴的这个代码也是有错误的,这个应该怎么修改?
#include<stdio.h>
struct std{
int num;
char name[20];
double chinese;
};
int main(){
int choice;
struct std s[100];
int i=0,n,x,num;
printf("**************************************");
printf("*********** 欢迎进入 ***********");
printf("*******某某小学学生信息管理系统*******");
printf("|------------------------------------|");
printf("| 1.录入学生信息 |");
printf("| 2.显示学生信息 |");
printf("| 3.查询学生信息 |");
printf("| 4.查询成绩信息 |");
printf("| 5.退出信息系统 |");
printf("**************************************");
switch (choice){
case 1:
printf("请输入学生的总人数(不能超过2000人):");
scanf("%d",&n);
for(i=0;i<num;i++){
printf("请输入第d个学生的信息:",i+1);
scanf("%d%s%lf",&s[i].xuehao,s[i].name,&s[i].chinese);
}
printf("学生信息已成功添加!\n");
break;
case 2:
printf("学生信息列表:\n");
for (i = 0; i < num_students; i++) {
printf("学号:%d,姓名:%s,成绩:%.2f\n"s[i].num,s[i].name,s[i].chinese);
}
break;
}
}
【以下回答由 GPT 生成】
问题内容: 目前我在网上找到了一个与我们上课讲的内容结合的C语言代码,但我觉得这个代码使用switch-case实现可能不太好,并且其中也有错误。请问应该如何修改这个代码呢?
以下是代码:
#include<stdio.h>
struct std{
int num;
char name[20];
double chinese;
};
int main(){
int choice;
struct std s[100];
int i=0, n, x, num;
printf("**************************************");
printf("*********** 欢迎进入 ***********");
printf("*******某某小学学生信息管理系统*******");
printf("|------------------------------------|");
printf("| 1.录入学生信息 |");
printf("| 2.显示学生信息 |");
printf("| 3.查询学生信息 |");
printf("| 4.查询成绩信息 |");
printf("| 5.退出信息系统 |");
printf("**************************************");
switch(choice){
case 1:
printf("请输入学生的总人数(不能超过2000人):");
scanf("%d", &n);
for(i=0; i<n; i++){
printf("请输入第%d个学生的信息:", i+1);
scanf("%d%s%lf", &s[i].num, s[i].name, &s[i].chinese);
}
printf("学生信息已成功添加!\n");
break;
case 2:
printf("学生信息列表:\n");
for(i=0; i<num_students; i++){
printf("学号:%d,姓名:%s,成绩:%.2f\n", s[i].num, s[i].name, s[i].chinese);
}
break;
}
}
首先,需要将代码中的switch
语句放到一个循环中,以便多次执行用户选择的操作。循环的退出条件可以是用户选择退出信息系统(选择5)。另外,使用do-while
循环结构可以确保至少执行一次。
其次,为了防止代码中存在的错误,可以将变量choice
的初始化放到循环内,并且添加一个default
分支处理无效的选择。
另外,为了在显示学生信息时知道有多少学生已经录入,可以添加一个记录学生数量的变量num_students
。
根据以上的需求和问题,我修改了代码如下:
#include<stdio.h>
struct std{
int num;
char name[20];
double chinese;
};
int main(){
struct std s[100];
int i = 0;
int choice;
int n;
int num_students = 0; // 记录学生数量
printf("**************************************\n");
printf("*********** 欢迎进入 ***********\n");
printf("*******某某小学学生信息管理系统*******\n");
printf("|------------------------------------|\n");
printf("| 1.录入学生信息 |\n");
printf("| 2.显示学生信息 |\n");
printf("| 3.查询学生信息 |\n");
printf("| 4.查询成绩信息 |\n");
printf("| 5.退出信息系统 |\n");
printf("**************************************\n");
do {
printf("请输入您的选择:");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("请输入学生的总人数(不能超过2000人):");
scanf("%d", &n);
for (i = 0; i < n; i++) {
printf("请输入第%d个学生的信息:", i + 1);
scanf("%d%s%lf", &s[i].num, s[i].name, &s[i].chinese);
}
num_students = n; // 更新学生数量
printf("学生信息已成功添加!\n");
break;
case 2:
if (num_students == 0) {
printf("没有学生信息可以显示。\n");
break;
}
printf("学生信息列表:\n");
for (i = 0; i < num_students; i++) {
printf("学号:%d,姓名:%s,成绩:%.2f\n", s[i].num, s[i].name, s[i].chinese);
}
break;
case 3:
// 添加查询学生信息的代码
break;
case 4:
// 添加查询成绩信息的代码
break;
case 5:
printf("感谢使用学生信息管理系统!\n");
break;
default:
printf("无效的选择,请重新输入。\n");
break;
}
} while (choice != 5);
return 0;
}
上述修改后的代码使用do-while
循环结构,使得用户可以多次选择操作,直到选择退出信息系统。同时,在学生信息显示前添加了对学生数量的判断,如果学生数量为0,则显示相应的提示信息。
希望这样的修改能满足您的需求。如果您还有其他问题,请随时提问。
【相关推荐】
代码大体框架还是可以用的
struct std s[100];
这个可以定义成全局变量,然后每个模块做成一个独立的函数。