// 用户登录 void login() { int role,i; char id[MAX_STR_LEN], pwd[MAX_STR_LEN]; printf("\t\t\t-----------------------------\n"); printf("\t\t\t| 欢迎使用新生入学管理系统! |\n"); printf("\t\t\t| 1.管理员 |\n"); printf("\t\t\t| 2.新生 |\n"); printf("\t\t\t| 0.退出 |\n"); printf("\t\t\t-----------------------------\n"); printf("\t\t\t 请输入0-2:"); scanf("\t\t\t%d", &role); switch (role) { case 1: printf("\t\t\t 欢迎管理员!\n"); printf("\n\t\t\t请输入账号/学号:"); scanf("%s", id); printf("\n\t\t\t请输入密码:"); scanf("%s", pwd); if (strcmp(id, "gly") == 0 && strcmp(pwd, "0529") == 0) { admin_menu(); } else { printf("\t\t\t登录失败!账号或密码错误!\n"); system("pause"); // } break; case 2: printf("\n\t\t\t请输入账号/学号:"); scanf("%s", id); printf("\n\t\t\t请输入密码:"); scanf("%s", pwd); for (int i = 0; i < stu_num; i++) { if (strcmp(students[i].id, id) == 0){ printf("\n\t\t\t^v^欢迎%s来到桂林航天工业学院!^v^\n\n", students[i].name);} if (strcmp(students[i].id, id) == 0 && strcmp(students[i].pwd, pwd) == 0) { student_menu(); return; } } printf("\t\t\t登录失败!学号或密码错误!\n"); system("pause"); break; case 0: printf("\t\t\t正在退出...\n"); break; default: printf("\t\t\t登录失败!请输入正确的角色编号!\n"); system("pause"); break; }while (role != 0); } 想让此段代码输错或输入其他数字时能继续运行,请帮我改善
时间: 2023-08-11 11:05:35 浏览: 173
一个C-S模版,该模版由三部分的程序组成
你可以把整个登录功能放在一个while循环中,让用户可以一直输入直到正确登录或选择退出。同时,可以在每次循环后清空输入缓冲区,避免输入错误导致的问题。下面是修改后的代码:
```
// 用户登录
void login() {
int role = -1; // 把role初始化为-1,确保进入下面的循环
char id[MAX_STR_LEN], pwd[MAX_STR_LEN];
while (role != 0) { // 循环直到用户选择退出
system("cls"); // 清空屏幕
printf("\t\t\t-----------------------------\n");
printf("\t\t\t| 欢迎使用新生入学管理系统! |\n");
printf("\t\t\t| 1.管理员 |\n");
printf("\t\t\t| 2.新生 |\n");
printf("\t\t\t| 0.退出 |\n");
printf("\t\t\t-----------------------------\n");
printf("\t\t\t 请输入0-2:");
scanf("%d", &role);
fflush(stdin); // 清空输入缓冲区
switch (role) {
case 1:
printf("\t\t\t 欢迎管理员!\n");
printf("\n\t\t\t请输入账号/学号:");
scanf("%s", id);
fflush(stdin);
printf("\n\t\t\t请输入密码:");
scanf("%s", pwd);
fflush(stdin);
if (strcmp(id, "gly") == 0 && strcmp(pwd, "0529") == 0) {
admin_menu();
} else {
printf("\t\t\t登录失败!账号或密码错误!\n");
system("pause");
}
break;
case 2:
printf("\n\t\t\t请输入账号/学号:");
scanf("%s", id);
fflush(stdin);
printf("\n\t\t\t请输入密码:");
scanf("%s", pwd);
fflush(stdin);
for (int i = 0; i < stu_num; i++) {
if (strcmp(students[i].id, id) == 0) {
printf("\n\t\t\t^v^欢迎%s来到桂林航天工业学院!^v^\n\n", students[i].name);
}
if (strcmp(students[i].id, id) == 0 && strcmp(students[i].pwd, pwd) == 0) {
student_menu();
return;
}
}
printf("\t\t\t登录失败!学号或密码错误!\n");
system("pause");
break;
case 0:
printf("\t\t\t正在退出...\n");
break;
default:
printf("\t\t\t登录失败!请输入正确的角色编号!\n");
system("pause");
break;
}
}
}
```
这样,用户就可以一直输入直到正确登录或选择退出。同时,由于我们清空了输入缓冲区,用户输入错误也不会导致程序出错。
阅读全文