用C语言,要求如下:可以实现用户的注册登录;将用户信息储存在txt文件中
时间: 2023-06-11 15:07:06 浏览: 66
好的,以下是一个简单的示例代码,可以实现用户的注册登录,将用户信息储存在txt文件中。需要注意的是,此代码并不是最完美的实现,仅供参考。
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_USERS 100 // 最大用户数
#define MAX_USERNAME_LEN 20 // 用户名最大长度
#define MAX_PASSWORD_LEN 20 // 密码最大长度
typedef struct {
char username[MAX_USERNAME_LEN];
char password[MAX_PASSWORD_LEN];
} User;
User users[MAX_USERS]; // 用户数组
int num_users = 0; // 当前用户数
// 从文件中读取用户数据
void load_users() {
FILE* fp = fopen("users.txt", "r");
if (fp == NULL) {
printf("Error: cannot open file users.txt\n");
exit(1);
}
while (fscanf(fp, "%s %s", users[num_users].username, users[num_users].password) == 2) {
num_users++;
}
fclose(fp);
}
// 将用户数据写入文件
void save_users() {
FILE* fp = fopen("users.txt", "w");
if (fp == NULL) {
printf("Error: cannot open file users.txt\n");
exit(1);
}
for (int i = 0; i < num_users; i++) {
fprintf(fp, "%s %s\n", users[i].username, users[i].password);
}
fclose(fp);
}
// 注册新用户
void register_user() {
char username[MAX_USERNAME_LEN];
char password[MAX_PASSWORD_LEN];
printf("Username: ");
scanf("%s", username);
// 检查用户名是否已存在
for (int i = 0; i < num_users; i++) {
if (strcmp(username, users[i].username) == 0) {
printf("Error: username already exists\n");
return;
}
}
printf("Password: ");
scanf("%s", password);
// 添加新用户
strcpy(users[num_users].username, username);
strcpy(users[num_users].password, password);
num_users++;
save_users();
}
// 用户登录
void login() {
char username[MAX_USERNAME_LEN];
char password[MAX_PASSWORD_LEN];
printf("Username: ");
scanf("%s", username);
printf("Password: ");
scanf("%s", password);
// 检查用户名和密码是否匹配
for (int i = 0; i < num_users; i++) {
if (strcmp(username, users[i].username) == 0 && strcmp(password, users[i].password) == 0) {
printf("Login successful\n");
return;
}
}
printf("Error: incorrect username or password\n");
}
int main() {
load_users();
int choice;
do {
printf("1. Register\n");
printf("2. Login\n");
printf("3. Exit\n");
printf("Choice: ");
scanf("%d", &choice);
switch (choice) {
case 1:
register_user();
break;
case 2:
login();
break;
case 3:
printf("Goodbye!\n");
break;
default:
printf("Error: invalid choice\n");
break;
}
} while (choice != 3);
return 0;
}
```
在此代码中,我们定义了一个 `User` 结构体,其中包含了用户名和密码两个信息。我们使用一个 `users` 数组来存储所有用户的信息,并使用一个 `num_users` 变量来记录当前用户数。
在 `load_users` 函数中,我们从 `users.txt` 文件中读取用户数据,并将其存储在 `users` 数组中。
在 `save_users` 函数中,我们将 `users` 数组中的用户数据写入 `users.txt` 文件中。
在 `register_user` 函数中,我们首先要求用户输入用户名和密码,并检查用户名是否已经存在。如果该用户名已经存在,则注册失败。否则,我们将新用户的信息添加到 `users` 数组中,并将其写入文件中。
在 `login` 函数中,我们要求用户输入用户名和密码,并检查其是否匹配 `users` 数组中的任意一个用户。如果匹配成功,则登录成功。否则,登录失败。
在 `main` 函数中,我们使用一个循环来等待用户的选择。用户可以选择注册、登录或退出程序。在每次注册或登录后,我们都将用户数据写入文件中。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)