void Student(struct student stu[N]) { int i, Sid = -1; // Sid 表示当前登录学生的下标,初始值为 -1 表示未找到 char num1[] = "2021110300236"; char pass1[] = "123456"; char num[13], pass[10]; printf("请输入学号: "); scanf("%s", num); printf("请输入密码: "); scanf("%s", pass); while (Sid == -1) { // 使用 while 循环代替 goto 语句 if (strcmp(num1, num) == 0 && strcmp(pass1, pass) == 0) { Sid = i; break; } printf("账号或者密码错误!请重新输入 \n"); printf("请输入学号: "); scanf("%s", num); printf("请输入密码: "); scanf("%s", pass); }// 在这里可以使用 Sid 变量进行后续操作 } int main1() { struct student stu[N]; int n = 0; while (n < 5) { Student(stu); // 这里可以进行后续操作 n++; if (n == 5) { printf("已达到最大登录次数!\n"); break; } printf("是否继续登录?(Y/N)"); char choice; scanf(" %c", &choice); if (choice == 'N' || choice == 'n') { break; } else { continue; } } return 0; } int login2(){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; } }优化代码
时间: 2024-03-14 10:45:21 浏览: 127
首先,我们可以将登录验证的代码进行优化,避免使用 while 循环和 goto 语句。可以使用一个变量记录当前登录学生的下标,如果登录成功,则直接进行后续操作。代码如下:
```
int Login(struct student stu[N]) {
int Sid = -1; // Sid 表示当前登录学生的下标,初始值为 -1 表示未找到
char num1[] = "2021110300236";
char pass1[] = "123456";
char num[13], pass[10];
printf("请输入学号: ");
scanf("%s", num);
printf("请输入密码: ");
scanf("%s", pass);
for (int i = 0; i < N; i++) {
if (strcmp(num1, num) == 0 && strcmp(pass1, pass) == 0) {
Sid = i;
break;
}
}
if (Sid == -1) {
printf("账号或者密码错误!\n");
}
return Sid;
}
```
其次,我们可以将主函数部分进行优化。可以在每次登录后询问用户是否继续登录,并在达到最大登录次数时提示用户。代码如下:
```
int main() {
struct student stu[N];
int n = 0, Sid;
do {
Sid = Login(stu);
if (Sid != -1) {
// 在这里可以进行后续操作
printf("登录成功!\n");
}
n++;
if (n == 5) {
printf("已达到最大登录次数!\n");
break;
}
printf("是否继续登录?(Y/N)");
char choice;
scanf(" %c", &choice);
if (choice == 'N' || choice == 'n') {
break;
}
} while (1);
return 0;
}
```
最后,我们可以将登录后的操作部分进行优化,使用 switch 语句实现菜单选择功能。代码如下:
```
int main() {
struct student stu[N];
int n = 0, Sid;
do {
Sid = Login(stu);
if (Sid != -1) {
// 在这里可以进行后续操作
printf("登录成功!\n");
while (1) {
printf("请选择(0-4): ");
scanf("%d", &n);
switch (n) {
case 1:
Register(stu, Sid);
break;
case 2:
LookUpdatePersonal(stu, Sid);
break;
case 3:
DormitoryCnd(stu, Sid);
break;
case 4:
system("cls");
Print_Map();
break;
case 0:
n = 5;
break;
default:
printf("输入有误,请重新输入!\n");
break;
}
if (n == 5) {
break;
}
}
}
n++;
if (n == 5) {
printf("已达到最大登录次数!\n");
break;
}
printf("是否继续登录?(Y/N)");
char choice;
scanf(" %c", &choice);
if (choice == 'N' || choice == 'n') {
break;
}
} while (1);
return 0;
}
```
阅读全文
相关推荐


















