Compulsived 2024-02-29 21:55 采纳率: 84.6%
浏览 5
已结题

我学网上制作了一个登录方式(账号加密码),但用不了,望指正。

#include<stdio.h>
#include<conio.h>
#include<string.h>
struct account
{
    char id[50];
    char code[50];
};

int main()
{
    struct account* a;
    char id[50];
    char code[50];
    char e;
    int i = 0,n;
    int flag;
    strcpy(a[0].id,"777");
    strcpy(a[0].code,"886");
    n = 1;
    printf("账号:");
    gets(id);
    printf("密码:");
    //gets(code);
    while (1)
    {
        e = _getch();
        if (e == 13)break;
        if (e == 8)
        {
            i--;
            continue;
        }

        code[i] = e;
        i++;
        printf("*");
    }

    for (i = 0; i < n; i++)
    {
        if (strcmp(id, a[i].id)==0 && strcmp(code, a[i].code)==0)
        {
            flag = 1;
            break;
        }
        flag = 0;
    }

    if (flag == 0)
    {
        printf("登录失败!");
        return 0;
    }
    else
    {
        printf("登陆成功!");
        return 1;
    }
}

我的比较出问题了,不论怎么输入都错,能与我讲解下如何改进吗

  • 写回答

6条回答 默认 最新

  • 关注

    问题比较多。
    (1)a直接定义成结构体变量就可以了,不需要用指针;
    (2)a是结构体变量,不是结构体数组,所以,所有的a[0].id 、a[0].code、a[i].id、a[i].code这种写法都不对。
    (3)读取密码后,需要给code添加字符串结束符。
    (4)因为就读取了1次用户名和密码,所以不需要for循环。
    修改后运行结果:

    img

    代码修改如下,我增加了注释:

    #include<stdio.h>
    #include<conio.h>
    #include<string.h>
    struct account
    {
        char id[50];
        char code[50];
    };
    
    int main()
    {
        struct account a; //修改,这里不需要用指针
        char id[50];
        char code[50];
        char e;
        int i = 0,n;
        int flag;
        strcpy(a.id,"777");//修改,a是结构体,不是数组,不需要用下标
        strcpy(a.code,"886");//修改,a是结构体,不是数组,不需要用下标
        n = 1;
        printf("账号:");
        gets(id);
        printf("密码:");
        //gets(code);
        while (1)
        {
            e = _getch();
            if (e == 13)break;
            if (e == 8)
            {
                i--;
                continue;
            }
    
            code[i] = e;
            i++;
            printf("*");
        }
        code[i]='\0'; //添加结束符
        printf("\n"); //这里加一个换行符,登录结果在下一行输出
    
        if (strcmp(id, a.id)==0 && strcmp(code, a.code)==0)
        {
            flag = 1;
        }else
            flag = 0; //账号密码不匹配
    
        if (flag == 0)
        {
            printf("登录失败!");
            return 0;
        }
        else
        {
            printf("登陆成功!");
            return 1;
        }
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 3月12日
  • 已采纳回答 3月4日
  • 创建了问题 2月29日

悬赏问题

  • ¥30 电脑误删了手机的照片怎么恢复?
  • ¥15 (标签-python|关键词-char)
  • ¥15 python+selenium,在新增时弹出了一个输入框
  • ¥15 苹果验机结果的api接口哪里有??单次调用1毛钱及以下。
  • ¥20 学生成绩管理系统设计
  • ¥15 来一个cc穿盾脚本开发者
  • ¥15 CST2023安装报错
  • ¥15 使用diffusionbert生成文字 结果是PAD和UNK怎么办
  • ¥15 有人懂怎么做大模型的客服系统吗?卡住了卡住了
  • ¥20 firefly-rk3399上启动卡住了