c语言:用结构体书写,注册,登录
时间: 2023-08-10 11:50:13 浏览: 142
好的,以下是一个使用结构体来实现用户注册和登录的简单 C 语言程序。请注意,这只是一个演示程序,实际应用中需要更严格的安全措施。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_USERS 100 // 最大用户数
#define MAX_NAME 20 // 用户名的最大长度
#define MAX_PASSWORD 20 // 密码的最大长度
// 用户结构体
typedef struct {
char name[MAX_NAME];
char password[MAX_PASSWORD];
} User;
// 从文件中读取用户信息
void read_users(User *users, int *num_users) {
FILE *fp = fopen("users.txt", "r");
if (fp == NULL) {
*num_users = 0;
return;
}
int i = 0;
while (i < MAX_USERS && fscanf(fp, "%s %s", users[i].name, users[i].password) == 2) {
i++;
}
*num_users = i;
fclose(fp);
}
// 将用户信息写入文件
void write_users(User *users, int num_users) {
FILE *fp = fopen("users.txt", "w");
for (int i = 0; i < num_users; i++) {
fprintf(fp, "%s %s\n", users[i].name, users[i].password);
}
fclose(fp);
}
// 注册新用户
void register_user(User *users, int *num_users) {
if (*num_users >= MAX_USERS) {
printf("Sorry, the maximum number of users has been reached.\n");
return;
}
printf("Enter a username: ");
char name[MAX_NAME];
scanf("%s", name);
// 检查用户名是否已经存在
for (int i = 0; i < *num_users; i++) {
if (strcmp(users[i].name, name) == 0) {
printf("Sorry, that username is already taken.\n");
return;
}
}
printf("Enter a password: ");
char password[MAX_PASSWORD];
scanf("%s", password);
// 将新用户添加到列表中
strcpy(users[*num_users].name, name);
strcpy(users[*num_users].password, password);
*num_users += 1;
write_users(users, *num_users);
printf("Registration successful!\n");
}
// 登录用户
void login(User *users, int num_users) {
printf("Enter your username: ");
char name[MAX_NAME];
scanf("%s", name);
printf("Enter your password: ");
char password[MAX_PASSWORD];
scanf("%s", password);
// 检查用户名和密码是否匹配
for (int i = 0; i < num_users; i++) {
if (strcmp(users[i].name, name) == 0 && strcmp(users[i].password, password) == 0) {
printf("Login successful!\n");
return;
}
}
printf("Sorry, incorrect username or password.\n");
}
int main() {
User users[MAX_USERS];
int num_users;
read_users(users, &num_users);
printf("Welcome!\n");
while (1) {
printf("Enter 'r' to register, 'l' to login, or 'q' to quit: ");
char choice;
scanf(" %c", &choice);
if (choice == 'r') {
register_user(users, &num_users);
} else if (choice == 'l') {
login(users, num_users);
} else if (choice == 'q') {
break;
} else {
printf("Invalid choice.\n");
}
}
return 0;
}
```
在这个程序中,我们使用了一个 `User` 结构体来表示每个用户的用户名和密码。在 `read_users` 函数中,我们从名为 `users.txt` 的文件中读取用户信息,如果文件不存在则默认有 0 个用户。在 `write_users` 函数中,我们将用户信息写入文件。在 `register_user` 函数中,我们要求用户输入一个新的用户名和密码,并将新用户添加到列表中。在 `login` 函数中,我们要求用户输入一个现有的用户名和密码,并检查它们是否与列表中的某个用户匹配。
请注意,这个程序中的用户名和密码并没有经过加密,因此可以轻松地被破解。在实际应用中,应该使用更安全的加密方法来保护用户的隐私。
阅读全文