认真学习的pea 发表于 2020-7-14 09:04:14

写的一个简单的小项目出现了问题,键盘输入无法进入下一阶段。和大家交流下解决思!!

/* 1.使用结构体将用户名和密码进行存储
实现用户查看、用户管理功能:
0)查看所有用户
1)修改用户名
2)修改密码 */
#include<stdio.h>
#include<string.h>
struct user
{
        char name;
        char pwd;
};//定义结构体
struct user check={{"pea1","123456"},{"pea2","1234567"},{"pea3","12345678"}
       
};//定义全局变量

int check_name_pwd(void)//封装函数检查用户名和密码是否匹配
{               
        int i;
        int countx1=0;
        int countx2=0;
        char user_={0};//输入的用户名
        char pwd_={0};//输入的密码
        printf("请输入用户名\n");
        scanf("%s",user_);
        while(getchar()!='\0');//清空缓存区
        /* printf("%s\n",user_); */
        printf("请输入密码\n");
        scanf("%s",pwd_);
        while(getchar()!='\0');//清空缓存区
        /* printf("%s\n",pwd_); */
        for(i=0;i<3;i++)
        {
                if(strcmp(user_,check.name)==0&&strcmp(pwd_,check.pwd)==0)
                {
                        countx1++;                               
                        countx2++;
                        break;
                }               
        }
       
        return         countx1+countx2;       
}

int main(void)
{       
        int j=1;       
        while(1) //用户登录功能
        {                               
                if(check_name_pwd()!=2)//调用函数判断用户名和密码是否匹配
                {
                        printf("用户名或密码错误!请重新输入\n");
                        printf("第%d次错误\n",j);
                        printf("3次后退出\n");
                        if(j==3)//3次错误后退出程序
                        {       
                                printf("第3次错误再见!\n");
                                return 0;
                        }
                        j++;                       
                }
                else
                {
                        printf("welcome to pea's home\n");
                        break;
                }
        }
        while(1)
        {
                int k,f,g,cmd;
                char name1={0};//修改的新用户名
                char pwd1={0};//修改指定用户名对应的密码
                printf("请输入指令\n");
                printf("0查看所有用户\n1修改用户名\n2修改密码");
                scanf("%d",&cmd);
                if(k==0)//功能菜单0
                {
                        for(f=0;f<3;f++)
                        {
                                printf("%d:%s\n",k+1,check.name);
                        }
                }
                if(k==1)//功能菜单1
                {
                        printf("请输入指令修改对应的用户名\n");
                        for(f=0;f<3;f++)
                        {
                                printf("%d:%s\n",f,check.name);
                        }
                        scanf("%d",&g);
                        printf("请输入用户名\n");
                        scanf("%s",name1);
                        bzero(check.name,20);
                        strncpy(name1,check.name,sizeof(name1));                       
                }
                if(k==2)//功能菜单2
                {
                        printf("请输入指令修改对应的用户名的密码\n");
                        for(f=0;f<3;f++)
                        {
                                printf("%d:%s\n",f,check.pwd);
                        }
                        scanf("%d",&g);
                        printf("请输入用户名\n");
                        scanf("%s",pwd1);
                        bzero(check.pwd,20);
                        strncpy(pwd1,check.pwd,sizeof(pwd1));
                }       
        }
        return 0;       
}



//代码没有语法错误,逻辑错误预计在函数check_name_pwd(void)段输入位置。

认真学习的pea 发表于 2020-7-14 09:51:06

问题已经解决了
while(getchar()!='\0');//清空缓存区改成 while(getchar()!='\n');//清空缓存区
问题就解决了
页: [1]
查看完整版本: 写的一个简单的小项目出现了问题,键盘输入无法进入下一阶段。和大家交流下解决思!!