2301_81041204 2024-06-14 12:29 采纳率: 0%
浏览 2

关于#C语言#的问题,如何解决?(相关搜索:c语言)

img


试了很多次,文件真实存在,输入的密码和账户也都正确的,可还是说我输入错误,希望帮忙解答一下我是语法哪里错了吗

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-06-14 12:29
    关注

    引自免费微信小程序:皆我百晓生

    从你提供的代码片段来看,确实存在一些问题。首先,代码片段并不完整,缺少了关键的逻辑部分,比如读取文件中的数据与用户输入进行比较的部分。不过,根据你描述的问题,我们可以逐步分析并修改代码。

    问题1:文件打开方式错误

    在打开文件时,你使用了 "注册信息记录,txt","rb" 这样的格式,这会导致编译器报错。正确的方式是将文件名和模式放在双引号内,且不应有逗号分隔。

    问题2:文件路径和模式

    确保文件路径正确,并且使用二进制模式 "rb" 或文本模式 "r" 打开文件,取决于文件内容。

    问题3:scanf_s 的使用

    scanf_s 是一个安全版本的 scanf,在 Visual Studio 等环境中使用,它需要额外的参数来限制字符串的长度。但在这个上下文中,你可能不需要这个函数,标准的 scanf 就可以。

    问题4:逻辑流程混乱

    代码中有些逻辑似乎没有正确实现,例如,userId 的赋值和循环条件等。

    修改后的代码示例

    下面是一个修改后的代码示例,用于登录功能:

    #include <stdio.h>
    #include <string.h>
    
    #define MAX_USERS 100
    #define MAX_CARD_LEN 10
    #define MAX_PASSWORD_LEN 10
    
    struct User {
        char cardNumber[MAX_CARD_LEN];
        char password[MAX_PASSWORD_LEN];
    } users[MAX_USERS];
    
    int main() {
        FILE *fp;
        fp = fopen("注册信息记录.txt", "r");
        if (fp == NULL) {
            printf("文件打不开,无法登入!\n");
            return 1;
        }
    
        int userCount = 0;
        while (fscanf(fp, "%s %s", users[userCount].cardNumber, users[userCount].password) == 2) {
            userCount++;
        }
        fclose(fp);
    
        char cardNumber[MAX_CARD_LEN];
        char password[MAX_PASSWORD_LEN];
        int attempts = 0;
    
        while (attempts < 3) {
            printf("请输入卡号(最多9位数字):");
            scanf("%9s", cardNumber);
            printf("请输入密码(最多9位):");
            scanf("%9s", password);
    
            int userId = -1;
            for (int i = 0; i < userCount; i++) {
                if (strcmp(users[i].cardNumber, cardNumber) == 0 && strcmp(users[i].password, password) == 0) {
                    userId = i;
                    break;
                }
            }
    
            if (userId != -1) {
                printf("登录成功!\n");
                return 0;
            } else {
                attempts++;
                printf("卡号或密码错误,请重试(剩余尝试次数:%d)\n", 3 - attempts);
            }
        }
    
        printf("尝试次数过多,登录失败。\n");
        return 1;
    }
    

    这段代码首先从文件中读取用户信息,然后让用户输入卡号和密码,并与文件中的信息进行比对。如果匹配,则登录成功;否则,允许用户重试,直到尝试次数用完。

    注意事项

    • 确保文件路径正确。
    • 文件应包含每行一个卡号和密码,中间用空格分隔。
    • 代码中使用了 fscanfstrcmp 来处理文件读取和字符串比较,这些函数需要包含 <stdio.h><string.h> 头文件。
    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月14日