C语言实现用户注册和登录

实现功能: 1、用户注册:注册账号、密码
功能:用户输入用户名用户密码,将其写入txt文档中。2、用户登录认证:用户名、用户密码登录,
功能:用户输入用户名和密码,与用户信息txt文档进行查找验证。
如果用户名和密码错误,则重新输入;
如果用户名和密码正确,则返回“欢迎用户光临”的提示信息。
三、参考资料
1、用户注册参考程序一:写入txt文档用户信息的程序(1)定义头文件#include<stdlib.h> #include<stdio.h>
(2)定义、打开文件FILE*fp; char ch,filename[10]; scanf("%s",filename);
fp= fopen(filename,"w+");打开输出文件并使fp指向此文件
(3)读取、输出图像文件数据
whilelch!=#)
当输入"#时结束循环
fputc(ch,fp); putchar(ch); ch=getchar0;
// 向磁盘文件输出一个字符
I/将输出的字符显示在屏幕上再接收从键盘输入的一个字符

写一下发你

可以参考《C语言利用链表与文件实现登录注册》:

结合自身经验及chatgpt
以下是使用C语言实现用户注册和登录认证功能的程序示例:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_USERS 100
#define MAX_USERNAME_LEN 20
#define MAX_PASSWORD_LEN 20

struct User {
    char username[MAX_USERNAME_LEN];
    char password[MAX_PASSWORD_LEN];
};

struct User users[MAX_USERS];
int totalUsers = 0;

void registerUser() {
    char username[MAX_USERNAME_LEN];
    char password[MAX_PASSWORD_LEN];

    printf("Enter username: ");
    scanf("%s", username);

    printf("Enter password: ");
    scanf("%s", password);

    if (totalUsers < MAX_USERS) {
        strcpy(users[totalUsers].username, username);
        strcpy(users[totalUsers].password, password);
        totalUsers++;

        FILE *file = fopen("users.txt", "a");
        if (file == NULL) {
            printf("Error opening file\n");
            return;
        }

        fprintf(file, "%s %s\n", username, password);

        fclose(file);
        printf("Registration successful\n");
    } else {
        printf("Maximum number of users reached\n");
    }
}

int validateUser(char *username, char *password) {
    FILE *file = fopen("users.txt", "r");
    if (file == NULL) {
        printf("Error opening file\n");
        return 0;
    }

    char fileUsername[MAX_USERNAME_LEN];
    char filePassword[MAX_PASSWORD_LEN];

    while (fscanf(file, "%s %s", fileUsername, filePassword) != EOF) {
        if (strcmp(username, fileUsername) == 0 && strcmp(password, filePassword) == 0) {
            fclose(file);
            return 1;
        }
    }

    fclose(file);
    return 0;
}

void loginUser() {
    char username[MAX_USERNAME_LEN];
    char password[MAX_PASSWORD_LEN];

    printf("Enter username: ");
    scanf("%s", username);

    printf("Enter password: ");
    scanf("%s", password);

    if (validateUser(username, password)) {
        printf("Welcome, %s!\n", username);
    } else {
        printf("Invalid username or password\n");
    }
}

int main() {
    int choice;

    while (1) {
        printf("1. Register\n");
        printf("2. Login\n");
        printf("3. Exit\n");
        printf("Enter your choice: ");
        scanf("%d", &choice);

        switch (choice) {
            case 1:
                registerUser();
                break;
            case 2:
                loginUser();
                break;
            case 3:
                exit(0);
            default:
                printf("Invalid choice\n");
        }

        printf("\n");
    }

    return 0;
}

在上述示例中,用户信息将存储在users.txt文本文件中,每行包含一个用户名和密码。程序中使用结构体数组users来暂存用户信息,totalUsers变量用于记录当前用户数量。

registerUser()函数用于注册新用户。用户需要输入用户名和密码,然后将其写入users.txt文件,并在users数组中保存用户信息。

validateUser()函数用于验证用户登录。它会从users.txt文件中逐行读取用户名和密码,并与输入的用户名和密码进行比较。如果在文件中找到匹配的用户,则返回1;否则返回0。

loginUser()函数用于进行用户登录。用户输入用户名和密码,然后调用validateUser()函数进行验证。如果验证成功,将显示欢迎信息;否则显示无效的用户名或密码。

在主函数中,使用一个无限循环来提供用户选择注册、登录或退出的功能。根据用户的选择调用相应的函数,并在每次操作后输出一个空行以提高可读性。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_SIZE 100

// 结构体定义,用于存储用户信息
typedef struct {
    char username[MAX_SIZE];
    char password[MAX_SIZE];
} User;

// 函数声明
void registerUser();
void loginUser();

int main() {
    int choice;

    printf("1. 用户注册\n2. 用户登录\n");
    printf("请选择操作:");
    scanf("%d", &choice);

    switch (choice) {
        case 1:
            registerUser();
            break;
        case 2:
            loginUser();
            break;
        default:
            printf("无效的操作\n");
            break;
    }

    return 0;
}

// 用户注册功能
void registerUser() {
    User user;

    printf("请输入用户名:");
    scanf("%s", user.username);

    printf("请输入密码:");
    scanf("%s", user.password);

    // 打开文件以追加写入用户信息
    FILE *file = fopen("users.txt", "a");
    if (file == NULL) {
        printf("无法打开文件\n");
        return;
    }

    // 写入用户信息
    fprintf(file, "%s %s\n", user.username, user.password);

    fclose(file);

    printf("注册成功\n");
}

// 用户登录认证功能
void loginUser() {
    User user;
    char username[MAX_SIZE];
    char password[MAX_SIZE];
    int found = 0;

    printf("请输入用户名:");
    scanf("%s", username);

    printf("请输入密码:");
    scanf("%s", password);

    FILE *file = fopen("users.txt", "r");
    if (file == NULL) {
        printf("无法打开文件\n");
        return;
    }

    // 逐行读取用户信息,与输入的用户名和密码进行比较
    while (fscanf(file, "%s %s", user.username, user.password) != EOF) {
        if (strcmp(user.username, username) == 0 && strcmp(user.password, password) == 0) {
            found = 1;
            break;
        }
    }

    fclose(file);

    if (found) {
        printf("欢迎用户光临\n");
    } else {
        printf("用户名或密码错误\n");
    }
}

使用这段代码,用户可以选择进行注册或登录操作。当选择注册时,用户需要输入用户名和密码,这些信息将被写入一个名为"users.txt"的文本文件中。当选择登录时,用户需要输入用户名和密码,程序将会遍历"user.txt"文件中的用户信息,进行验证。如果用户名和密码匹配成功,则会返回"欢迎用户光临"的提示信息;否则,会提示用户名或密码错误。

基于new bing部分指引作答:
以下是使用C语言实现用户注册和用户登录认证的功能的示例代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_LENGTH 50

// 结构体定义:用于保存用户信息
typedef struct {
    char username[MAX_LENGTH];
    char password[MAX_LENGTH];
} User;

// 函数声明
void registerUser();
void loginUser();

int main() {
    int choice;
    
    printf("欢迎使用用户管理系统!\n");
    
    do {
        printf("\n请选择功能:\n");
        printf("1. 用户注册\n");
        printf("2. 用户登录认证\n");
        printf("0. 退出程序\n");
        printf("请输入选项:");
        scanf("%d", &choice);
        
        switch (choice) {
            case 1:
                registerUser();
                break;
            case 2:
                loginUser();
                break;
            case 0:
                printf("感谢使用用户管理系统,再见!\n");
                break;
            default:
                printf("无效的选项,请重新输入。\n");
        }
    } while (choice != 0);
    
    return 0;
}

// 用户注册功能实现
void registerUser() {
    User user;
    
    printf("\n--- 用户注册 ---\n");
    printf("请输入用户名:");
    scanf("%s", user.username);
    printf("请输入密码:");
    scanf("%s", user.password);
    
    FILE *file = fopen("user_info.txt", "a");
    if (file == NULL) {
        printf("无法打开文件,注册失败。\n");
        return;
    }
    
    fprintf(file, "%s %s\n", user.username, user.password);
    fclose(file);
    
    printf("注册成功!\n");
}

// 用户登录认证功能实现
void loginUser() {
    User user;
    
    printf("\n--- 用户登录 ---\n");
    printf("请输入用户名:");
    scanf("%s", user.username);
    printf("请输入密码:");
    scanf("%s", user.password);
    
    FILE *file = fopen("user_info.txt", "r");
    if (file == NULL) {
        printf("无法打开文件,登录失败。\n");
        return;
    }
    
    char line[MAX_LENGTH * 2];
    int found = 0;
    
    while (fgets(line, sizeof(line), file)) {
        char usernameFromFile[MAX_LENGTH];
        char passwordFromFile[MAX_LENGTH];
        
        sscanf(line, "%s %s", usernameFromFile, passwordFromFile);
        
        if (strcmp(user.username, usernameFromFile) == 0 && strcmp(user.password, passwordFromFile) == 0) {
            found = 1;
            break;
        }
    }
    
    fclose(file);
    
    if (found) {
        printf("欢迎用户 %s 光临!\n", user.username);
    } else {
        printf("用户名或密码错误,请重新登录。\n");
    }
}

上述代码实现的功能包括:

  1. 用户注册:用户输入用户名和密码,并将其写入名为"user_info.txt"的文本文件中。
  2. 用户登录认证:用户输入用户名和密码,与"user_info.txt"文件中的用户信息进行验证。如果用户名和密码正确,则显示欢迎信息;否则要求重新登录。

请注意,以上示例只是一个简单的演示版本,可能需要根据实际需求进行进一步的完善和优化,例如添加错误处理、加密存储密码等安全性措施。

参考:https://peakchen.blog.csdn.net/article/details/131536031?spm=1001.2014.3001.5502

  • 以下回答由chatgpt基于相关博客总结生成:

    根据问题描述,你想要使用C语言实现用户注册和登录功能。下面是一种可行的解决方案:

    1. 用户注册:

    2. 创建一个txt文档,用于保存用户的用户名和密码。可以使用fopen()函数以写入模式打开文档,然后使用fprintf()函数将用户名和密码写入文档中。

      c FILE *file = fopen("user_info.txt", "w"); if(file == NULL){ // 处理文件打开失败的情况 } fprintf(file, "%s %s\n", username, password); // 将用户名和密码写入文档中 fclose(file); // 关闭文档

    3. 提示用户输入用户名和密码,并将其保存到相应变量中。

      ```c char username[50]; // 用于存储用户名的字符串数组 char password[50]; // 用于存储密码的字符串数组

      printf("请输入用户名:"); scanf("%s", username);

      printf("请输入密码:"); scanf("%s", password); ```

    4. 用户登录认证:

    5. 读取txt文档中的用户名和密码,并和用户输入进行比对,如果匹配则登录成功,否则重新输入。

      ```c FILE *file = fopen("user_info.txt", "r"); if(file == NULL){ // 处理文件打开失败的情况 }

      char username[50]; // 用于存储用户名的字符串数组 char password[50]; // 用于存储密码的字符串数组 int isLoginSuccessful = 0; // 登录成功的标志

      while(fscanf(file, "%s %s\n", username, password) != EOF){ if(strcmp(username, input_username) == 0 && strcmp(password, input_password) == 0){ isLoginSuccessful = 1; // 标记登录成功 break; } }

      fclose(file); // 关闭文档

      if(isLoginSuccessful){ printf("欢迎用户光临!\n"); }else{ printf("用户名或密码错误,请重新输入!\n"); } ```

    注意事项: - 为了简化示例,上述代码没有加入用户输入的格式检查和密码加密等安全措施,实际开发中需要考虑用户输入的合法性以及安全性。 - 在实际项目中,通常会使用更为复杂的数据结构和算法来管理用户信息,例如使用哈希表或数据库来存储用户名和密码等信息,以提高效率和安全性。

    参考资料: - C 语言文件操作详解 - C 语言字符串处理函数