#define NUM 10 //用户数量 #define MAX_BOOKS 5 //用户信息 struct User { char name[30]; // 用户名 char password[30];//用户密码 int borrownumber; char Book_borrowmenu[30]; };//登录 int login_menu() { int i; struct User u1,u2; printf("请输入您的用户名:"); scanf("%s",u2.name); printf("请输入您的密码:"); scanf("%s",u2.password); for(i=0;i<NUM;i++) { if(strcmp(u1.name,u2.name)==0&&strcmp(u1.password,u2.password)==0) { printf("登录成功!\n");user_menu(); return 1; } else { printf("用户名或密码输入错误,请重新输入!\n"); return 0; } } } //注册 void register_menu() { struct User u1,u2; printf("请输入您的用户名[不超过6个字符]:"); scanf("%s",u1.name); printf("请输入您的密码[密码长度为6位]:"); scanf("%s",u1.password); if(strcmp(u1.name,u2.name)==0) { printf("您输入的用户名已存在,请重新输入!\n"); } if(strlen(u1.name)<=6&&strlen(u1.password)==6) { printf("注册成功!\n"); } else { printf("注册失败!\n"); printf("您输入的用户名或密码错误!请重新输入!\n"); } }怎么修改这段代码
时间: 2024-03-23 16:44:02 浏览: 51
C/C++中的typedef和#define详解
这段代码存在一些问题,需要进行修改:
1. 在登录函数中,u1结构体没有被初始化,会导致strcmp函数比较时出现错误。需要先将用户信息读入到u1结构体中。
2. 在登录函数中,for循环中的return语句应该放在循环外面,否则只会进行一次循环判断。
3. 在注册函数中,u2结构体没有被初始化,无法进行用户名比较。
4. 在注册函数中,判断用户名是否存在的逻辑应该放在输入用户名的后面,否则会导致输入密码时用户名已经被比较过了。
5. 在注册函数中,判断用户名和密码长度的逻辑应该使用逻辑运算符&&,而不是||。
修改后的代码如下:
```
#define NUM 10 //用户数量
#define MAX_BOOKS 5 //用户信息
struct User {
char name[30]; // 用户名
char password[30];//用户密码
int borrownumber;
char Book_borrowmenu[30];
};
//登录
int login_menu() {
int i;
struct User u1, u2;
printf("请输入您的用户名:");
scanf("%s", u2.name);
printf("请输入您的密码:");
scanf("%s", u2.password);
for (i = 0; i < NUM; i++) {
// 将用户信息读入到u1结构体中
// 注意:这里假定用户信息已经存储在数组中
u1 = user_array[i];
if (strcmp(u1.name, u2.name) == 0 && strcmp(u1.password, u2.password) == 0) {
printf("登录成功!\n");
user_menu();
return 1;
}
}
// 循环结束后再返回登录失败信息
printf("用户名或密码输入错误,请重新输入!\n");
return 0;
}
//注册
void register_menu() {
struct User u1, u2;
printf("请输入您的用户名[不超过6个字符]:");
scanf("%s", u1.name);
// 判断用户名是否存在
for (int i = 0; i < NUM; i++) {
u2 = user_array[i];
if (strcmp(u1.name, u2.name) == 0) {
printf("您输入的用户名已存在,请重新输入!\n");
return;
}
}
printf("请输入您的密码[密码长度为6位]:");
scanf("%s", u1.password);
// 判断用户名和密码长度是否符合要求
if (strlen(u1.name) <= 6 && strlen(u1.password) == 6) {
printf("注册成功!\n");
} else {
printf("注册失败!\n");
printf("您输入的用户名或密码错误!请重新输入!\n");
}
}
```
注:以上代码假定用户信息已经存储在数组`user_array`中。
阅读全文