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 变量进行后续操作} while(n<5) {优化这串代码
时间: 2024-03-14 20:45:08 浏览: 50
这段代码可以进行以下优化:
1. `while(n<5)` 没有对 `n` 进行初始化,需要在循环之前初始化 `n`。
2. 可以将 `while` 循环改为 `for` 循环,更加直观。
3. 可以使用 `continue` 语句来跳过当前循环,执行下一轮循环。
下面是修改后的代码:
```
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 main() {
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;
}
```
阅读全文