恰如风 2022-01-09 15:52 采纳率: 71.4%
浏览 37
已结题

为什么注册了第一次就不能注册第二次了 ?而且登录的时候不管登录什么都能成功?

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct log
{
char name[10];
char key[10];
struct log * next;
};
int main()
{
int m,n=1;
FILE * pf;
struct log * head=NULL, * p=NULL,* tail=NULL,* pMove=NULL;
char i[10],j[10];
while(n!=0)
{

    printf("-------学籍信息管理系统-教师端------\n");
    printf("-------------1.注册-----------------\n");
    printf("-------------2.登录-----------------\n");
    scanf("%d",&m);
    if(m==1)
    {
        printf("请新建用户名:");
        scanf("%s",i);
        if ((pf = fopen("m.txt", "r")) == NULL)
        {
            pf = fopen("m.txt", "w");
        }
        while(1)
        { 
            if (fscanf(pf,"%s%s\n",i,j) != 2) break;
            p = (struct log*)malloc(sizeof(struct log));
            p->next = NULL;
            strcpy(p->name,i);strcpy(p->key,j);
            if (head == NULL) 
                head = p;
            else 
                tail->next = p;
            tail = p;
        }
        fclose(pf);
        pMove=head;
        while(pMove!=NULL&&strcmp(pMove->name,i))
        {
            pMove=pMove->next;
        }
        if(pMove==NULL)
        {
            printf("设 置 密 码:");
            scanf("%s",j);
            if ((pf=fopen("m.txt","a"))==NULL)
            {
                printf("文件打开失败!");
                return;
            }
            printf("注册成功!\n");
            fprintf(pf,"%s %s",i,j);
            fclose(pf);
        }
        else if(strcmp(pMove->name,i)==0)
        {
            printf("该用户名已经被注册,请重新注册!\n");return;
        }
        else
        {
            printf("设 置 密 码:");
            scanf("%s",j);
            if ((pf=fopen("m.txt","a"))==NULL)
            {
                printf("文件打开失败!");
                return;
            }
            fprintf(pf,"%s %s",i,j);
            fclose(pf);
        }
    }
    else if(m==2)
    {
        printf("用户名:");
        scanf("%s",i);
        if ((pf = fopen("m.txt", "r")) == NULL)
        {
            printf("文件打开失败!");return;
        }
        while(1)
        { 
            if (fscanf(pf,"%s%s\n",i,j) != 2) break;
            p = (struct log*)malloc(sizeof(struct log));
            p->next = NULL;
            strcpy(p->name,i);strcpy(p->key,j);
            if (head == NULL) 
                head = p;
            else 
                tail->next = p;
            tail = p;
        }
        fclose(pf);
        pMove=head;
        while(pMove!=NULL&&strcmp(pMove->name,i))
        {
            pMove=pMove->next;
        }
        if(pMove!=NULL)
        {
            printf("密 码:");
            scanf("%s",j);
            pMove=head;
            while(pMove!=NULL&&strcmp(pMove->key,j))
            {
                pMove=pMove->next;
            }
            printf("登录成功!\n");
        }
        else
            printf("用户名不存在!\n");
    }
    else
        printf("输入错误!请重新输入!\n");
}

}

  • 写回答

1条回答 默认 最新

  • qzjhjxj 2022-01-10 12:33
    关注

    修改如下,供参考:

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    struct log
    {
        char name[10];
        char key[10];
        struct log* next;
    };
    int main()
    {
        int m, n = 1;
        FILE* pf;
        struct log* head = NULL, * p = NULL, * tail = NULL, * pMove = NULL;
        char i[10], j[10];
        while (n != 0)
        {
            printf("-------学籍信息管理系统-教师端------\n");
            printf("-------------1.注册-----------------\n");
            printf("-------------2.登录-----------------\n");
            scanf("%d", &m);
            if (m == 1)
            {
                if ((pf = fopen("m.txt", "r")) == NULL)
                {
                    
                    if ((pf = fopen("m.txt", "a")) == NULL)
                    {
                        printf("文件打开失败!");
                    }
                    else {
                        printf("请新建用户名:");
                        scanf("%s", i);
                        printf("设 置 密 码:");
                        scanf("%s", j);
                        fprintf(pf, "%s %s\n", i, j);
                        fclose(pf);
                        printf("用户注册成功!\n");
                    }                
                }
                else{
                    head = NULL, p = NULL, tail = NULL, pMove = NULL;
                    while (1)
                    {
                        if (fscanf(pf, "%s %s\n", i, j) != 2) break;
                        p = (struct log*)malloc(sizeof(struct log));
                        p->next = NULL;
                        strcpy(p->name, i); strcpy(p->key, j);
                        if (head == NULL)
                            head = p;
                        else
                            tail->next = p;
                        tail = p;
                    }
                    fclose(pf);
                    do {
                        printf("请新建用户名:");
                        scanf("%s", i);
                        pMove = head;
                        while (pMove != NULL && strcmp(pMove->name, i) != 0)
                        {
                            pMove = pMove->next;
                        }
                        if (pMove == NULL)
                        {
                            printf("设 置 密 码:");
                            scanf("%s", j);
                            pf = fopen("m.txt", "a");
                            fprintf(pf, "%s %s\n", i, j);
                            fclose(pf);
                            printf("用户注册成功!\n");
                        }
                        else
                            printf("该用户名已经被注册,请重新输入!\n");
                    } while (pMove != NULL);
                        
                }
            }
            else if (m == 2)
            {
                if ((pf = fopen("m.txt", "r")) == NULL)
                {
                    printf("无注册用户,请先注册用户。\n"); //return -1;
                }
                else{
                    head = NULL, p = NULL, tail = NULL, pMove = NULL;
                    while (1)
                    {
                        if (fscanf(pf, "%s %s\n", i, j) != 2) break;
                        p = (struct log*)malloc(sizeof(struct log));
                        p->next = NULL;
                        strcpy(p->name, i); strcpy(p->key, j);
                        if (head == NULL)
                            head = p;
                        else
                            tail->next = p;
                        tail = p;
                    }
                    fclose(pf);
                    printf("用户名:");
                    scanf("%s", i);
                    pMove = head;
                    while (pMove != NULL && strcmp(pMove->name, i) != 0)
                    {
                        pMove = pMove->next;
                    }
                    if (pMove != NULL)
                    {
                        printf("密 码:");
                        scanf("%s", j);
                        if (strcmp(pMove->key, j) == 0)
                        {
                            printf("登录成功!\n");
                            break;
                        }
                        else {
                            printf("密码错误!\n");
                        }
                    }
                    else
                        printf("用户名不存在!\n");
                }
            }
            else
                printf("输入错误!请重新输入!\n");
        }
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 1月19日
  • 已采纳回答 1月11日
  • 创建了问题 1月9日

悬赏问题

  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)