void Student(struct student stu[N]) { int i, n = 0; struct student *p; p=stu; char num1[] = "2021110300236"; char pass1[] = "111111"; char num[13], pass[10]; input:printf("请输入学号:"); scanf("%s",&num); printf("请输入密码:"); scanf("%s",&pass); for(i=0;i<sum;i++) { if(strcmp(num,num1)==0 && strcmp(pass,pass1)==0) { Sid+i; break; } } if(i==sum){ printf("你输入错误,请重新输入!\n"); goto input; } while (n < 4) { printf("亲爱的同学你好,这是你的注册报到流程:\n 注册缴费->宿舍楼领取钥匙->食堂办理饭卡->图书馆办理借书证->注册报到成功\n"); printf("请选择(0-4): "); scanf("%d", &n); switch (n) { case 1:Register(p);break; case 2:LookUpdatePersonal(p);break; case 3:DormitoryCnd(p);break; case 4:system("cls");Print_Map();break; case 0:n = 5;break; default:printf("无效的输入,请重新选择!\n");break; } } }优化这串代码
时间: 2024-04-07 13:28:35 浏览: 100
这段代码可以进行以下优化:
1. 改进输入方式:使用fgets函数代替scanf函数,可以避免输入字符数超过数组长度的问题,并且可以防止缓冲区溢出。
2. 增加代码可读性:使用枚举类型代替数字选择,增加代码可读性。
3. 简化代码逻辑:使用while循环代替goto语句,让代码逻辑更加清晰。
4. 提取重复代码:将重复的代码提取成函数,减少代码重复率。
综上所述,优化后的代码如下所示:
```c
#include <stdio.h>
#include <string.h>
#define N 100
struct student {
char num[13];
char pass[10];
int Sid;
};
enum Option {
REGISTER = 1,
LOOK_UPDATE_PERSONAL,
DORMITORY_CND,
PRINT_MAP,
QUIT
};
void register_student(struct student *p) {
printf("正在进行注册缴费...\n");
// 具体实现
}
void look_update_personal(struct student *p) {
printf("正在查看或更新个人信息...\n");
// 具体实现
}
void dormitory_cnd(struct student *p) {
printf("正在领取宿舍钥匙...\n");
// 具体实现
}
int main() {
struct student stu[N];
int i, n = 0, sum = N;
char num1[] = "2021110300236";
char pass1[] = "111111";
struct student *p = stu;
// 验证学号和密码
while (1) {
char num[13], pass[10];
printf("请输入学号:");
fgets(num, sizeof(num), stdin);
num[strcspn(num, "\n")] = '\0'; // 去除换行符
printf("请输入密码:");
fgets(pass, sizeof(pass), stdin);
pass[strcspn(pass, "\n")] = '\0'; // 去除换行符
if (strcmp(num, num1) == 0 && strcmp(pass, pass1) == 0) {
break;
} else {
printf("你输入错误,请重新输入!\n");
}
}
// 进行选项选择
while (n != QUIT) {
printf("亲爱的同学你好,这是你的注册报到流程:\n");
printf("1. 注册缴费\n2. 查看或更新个人信息\n3. 领取宿舍钥匙\n4. 打印地图\n0. 退出\n");
printf("请选择(0-4): ");
scanf("%d", &n);
switch (n) {
case REGISTER:
register_student(p);
break;
case LOOK_UPDATE_PERSONAL:
look_update_personal(p);
break;
case DORMITORY_CND:
dormitory_cnd(p);
break;
case PRINT_MAP:
system("cls");
printf("打印地图...\n");
break;
case QUIT:
printf("退出程序...\n");
break;
default:
printf("无效的输入,请重新选择!\n");
break;
}
}
return 0;
}
```
阅读全文