void Student(struct student stu[N]){ int i,n=0; struct student *p; p=stu; char num1[]="2021110300236"; char pass1[]="123456"; input:printf("请输入学号: "); char num[13]; scanf("%s",&num); printf("请输入密码: "); char pass[10]; scanf("%s",&pass); for(i=0;i<sum;i++) { if(strcmp(num1,num)==0 && strcmp(pass1,pass)==0){ Sid=i; break; } } if(i==sum){ printf("账号或者密码错误!请重新输入 \n"); goto input; }帮我优化这串代码
时间: 2024-03-14 13:45:04 浏览: 19
这段代码可以进行以下优化:
1. 将 `scanf()` 函数中的 `&` 去掉,因为 `num` 和 `pass` 已经是指针了,不需要再加上 `&`。
2. 将 `goto` 改为 `while` 循环,避免使用 `goto` 语句。
3. 不需要遍历整个 `stu` 数组来查找学生的信息,可以直接比较 `num` 和 `pass` 是否与预设的值相等。
4. 在找到学生信息时,可以使用 `break` 语句跳出循环。
下面是修改后的代码:
```
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 变量进行后续操作
}
```