我需要用C语言写一个注册账号密码的代码,账号密码储存在文件夹中
时间: 2024-05-14 17:18:21 浏览: 82
安全密码的C语言程序
好的,以下是一个简单的代码示例:
```c
#include <stdio.h>
#include <string.h>
#define MAX_USERS 100 // 最大用户数
#define MAX_NAME_LEN 20 // 用户名最大长度
#define MAX_PASS_LEN 20 // 密码最大长度
#define FILENAME "users.txt" // 存储用户信息的文件名
// 用户结构体
struct User {
char name[MAX_NAME_LEN + 1];
char pass[MAX_PASS_LEN + 1];
};
// 获取用户数量
int get_user_count() {
int count = 0;
FILE *fp = fopen(FILENAME, "r");
if (fp != NULL) {
while (!feof(fp)) {
char c = fgetc(fp);
if (c == '\n') {
count++;
}
}
fclose(fp);
}
return count;
}
// 检查用户名是否已存在
int is_user_exists(char name[]) {
int exists = 0;
FILE *fp = fopen(FILENAME, "r");
if (fp != NULL) {
char line[MAX_NAME_LEN + MAX_PASS_LEN + 3];
while (fgets(line, MAX_NAME_LEN + MAX_PASS_LEN + 3, fp) != NULL) {
char *n = strtok(line, ",");
if (strcmp(n, name) == 0) {
exists = 1;
break;
}
}
fclose(fp);
}
return exists;
}
// 注册用户
void register_user() {
struct User user;
printf("请输入用户名(不超过 %d 个字符):", MAX_NAME_LEN);
scanf("%s", user.name);
if (is_user_exists(user.name)) {
printf("该用户名已存在,请重新输入!\n");
return;
}
printf("请输入密码(不超过 %d 个字符):", MAX_PASS_LEN);
scanf("%s", user.pass);
FILE *fp = fopen(FILENAME, "a");
if (fp != NULL) {
fprintf(fp, "%s,%s\n", user.name, user.pass);
fclose(fp);
printf("注册成功!\n");
} else {
printf("注册失败!\n");
}
}
// 登录验证
void login() {
char name[MAX_NAME_LEN + 1];
char pass[MAX_PASS_LEN + 1];
printf("请输入用户名:");
scanf("%s", name);
printf("请输入密码:");
scanf("%s", pass);
FILE *fp = fopen(FILENAME, "r");
if (fp != NULL) {
char line[MAX_NAME_LEN + MAX_PASS_LEN + 3];
int found = 0;
while (fgets(line, MAX_NAME_LEN + MAX_PASS_LEN + 3, fp) != NULL) {
char *n = strtok(line, ",");
char *p = strtok(NULL, ",");
if (strcmp(n, name) == 0 && strcmp(p, pass) == 0) {
found = 1;
break;
}
}
fclose(fp);
if (found) {
printf("登录成功!\n");
} else {
printf("用户名或密码错误!\n");
}
} else {
printf("登录失败!\n");
}
}
int main() {
int choice;
do {
printf("请选择操作:\n");
printf("1. 注册账号\n");
printf("2. 登录账号\n");
printf("3. 退出程序\n");
scanf("%d", &choice);
switch (choice) {
case 1:
register_user();
break;
case 2:
login();
break;
case 3:
printf("谢谢使用!\n");
break;
default:
printf("无效的选项,请重新选择!\n");
break;
}
} while (choice != 3);
return 0;
}
```
代码中使用了一个用户结构体来存储用户名和密码,通过文件读写来实现账号密码的储存和验证。具体实现细节可以参考代码中的注释。注意要在程序所在目录下创建一个名为 `users.txt` 的文本文件用于存储用户信息。
阅读全文