标题:密码登录,当故意输错一次密码后无论以后对错都显示密码错误!求解决!
只看楼主
润润编程
Rank: 1
来 自:广东省
等 级:新手上路
帖 子:20
专家分:0
注 册:2015-11-2
结帖率:85.71%
已结贴  问题点数:10 回复次数:11 
密码登录,当故意输错一次密码后无论以后对错都显示密码错误!求解决!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define scanf scanf_s
#define MAX_PSD_LEN 20
int Password();
char PassWord3[MAX_PSD_LEN], *o = PassWord3, oh;
int count1 = 0, count2 = 0, count3 = 0;
int main()
{

    int a1;
    while (1)
{
    a1 = Password();
    if (a1 == 1)
    {

        printf("登录成功!");
        break;
    }
}
    system("pause");
    return 0;
}
int Password()                                        //Password函数,功能是使用原始密码登录学生管理系统,此函数是参考网上高手代码且进行修改
{
    while (1)
    {
        printf("请输入您的密码!\n");
        oh = getch();
        while (oh != 13 && count3<MAX_PSD_LEN - 1)       /*当按下回车键或密码长度达到19,则退出循环*/
        {
            if (oh == 8)                       /*如果按下的是向前删除键,则...*/
            {
                if (count3)              /*如果密码串中字符数大于零,则向前删除一个字符*/
                {
                    o--;
                    count3--;
                    printf("\b ");/*光标回退一格,将星号(*)改为空格*/
                    printf("\b"); /*光标重新回退一格*/
                }
            }
            else if ((oh <= 'Z'&&oh >= 'A') || (oh <= 'z'&&oh >= 'a') || (oh <= '9'&&oh >= '0'))
                /*如果输入的是密码的有效字符*/
            {
                printf("*");          /*输出一个星号*/
                count3++;
                *o = oh;                /*记录密码内容*/
                o++;
            }
            oh = getch();                    /*等待输入下一个字符*/
        }
        PassWord3[count3] = 0;
        if (strcmp(PassWord3, "woaic") == 0)
        {
            printf("登陆成功!\n");
            return 1;
        }
        else
        {
            count3 = 0;
            printf("密码输入错误!请重新输入:\n");
            printf("-------------------------------------------------------------------\n");
        }
    }
}
搜索更多相关主题的帖子: include system return 密码 
2016-01-04 10:40
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:5 
你的password函数无返回值啊

DO IT YOURSELF !
2016-01-04 10:46
润润编程
Rank: 1
来 自:广东省
等 级:新手上路
帖 子:20
专家分:0
注 册:2015-11-2
得分:0 
回复 2楼 wp231957
返回值在if条件语句内啊。

编程破防线
2016-01-04 11:00
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
if是啥意思  假如啊  假如失败 就进不去呢

DO IT YOURSELF !
2016-01-04 11:03
润润编程
Rank: 1
来 自:广东省
等 级:新手上路
帖 子:20
专家分:0
注 册:2015-11-2
得分:0 
回复 4楼 wp231957
不是还有else语句吗?大哥

编程破防线
2016-01-04 11:08
eFun
Rank: 6Rank: 6
等 级:禁止访问
威 望:1
帖 子:58
专家分:400
注 册:2015-12-27
得分:0 
目测,错误在输入错误后,未对指针还原至数组首地址。代码做如下修改试试:
int Password()                                        //Password函数,功能是使用原始密码登录学生管理系统,此函数是参考网上高手代码且进行修改
{
    while (1)
    {
        printf("请输入您的密码!\n");
        oh = getch();
        while (oh != 13 && count3<MAX_PSD_LEN - 1)       /*当按下回车键或密码长度达到19,则退出循环*/
        {
            if (oh == 8)                       /*如果按下的是向前删除键,则...*/
            {
                if (count3)              /*如果密码串中字符数大于零,则向前删除一个字符*/
                {
                    //o--;
                    count3--;
                    printf("\b ");/*光标回退一格,将星号(*)改为空格*/
                    printf("\b"); /*光标重新回退一格*/
                }
            }
            else if ((oh <= 'Z'&&oh >= 'A') || (oh <= 'z'&&oh >= 'a') || (oh <= '9'&&oh >= '0'))
                /*如果输入的是密码的有效字符*/
            {
                printf("*");          /*输出一个星号*/
                o[count3++]=oh;
               // *o = oh;                /*记录密码内容*/
               // o++;
            }
            oh = getch();                    /*等待输入下一个字符*/
        }
        PassWord3[count3] = 0;
        if (strcmp(PassWord3, "woaic") == 0)
        {
            printf("登陆成功!\n");
            return 1;
        }
        else
        {
            count3 = 0;
            printf("密码输入错误!请重新输入:\n");
            printf("-------------------------------------------------------------------\n");
        }
    }
}
 
2016-01-04 11:17
润润编程
Rank: 1
来 自:广东省
等 级:新手上路
帖 子:20
专家分:0
注 册:2015-11-2
得分:0 
回复 6楼 eFun
谢谢了!

编程破防线
2016-01-04 11:32
润润编程
Rank: 1
来 自:广东省
等 级:新手上路
帖 子:20
专家分:0
注 册:2015-11-2
得分:0 
回复 6楼 eFun
对了大哥 再请问一下 这个函数按照您的修改方式后无论 两次输的密码是否相符合都会显示是两次输入一致!为什么?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define scanf scanf_s
#define MAX_PSD_LEN 20
int Password();
int changepassword();
char PassWord1[MAX_PSD_LEN], *p = PassWord1, ch;
char PassWord2[MAX_PSD_LEN], *q = PassWord2, qh;
char PassWord3[MAX_PSD_LEN], *o = PassWord3, oh;
int count1 = 0, count2 = 0, count3 = 0;
int main()
{

    int a1,a2;
    while (1)
{
    a1 = Password();
    if (a1 == 1)
    {
        a2= changepassword();
        if (a2==2)
        break;
    }
}
    system("pause");
    return 0;
}
int Password()                                        //Password函数,功能是使用原始密码登录学生管理系统,此函数是参考网上高手代码且进行修改
{
    while (1)
    {
        printf("请输入您的密码!\n");
        oh = getch();
        while (oh != 13 && count3<MAX_PSD_LEN - 1)       /*当按下回车键或密码长度达到19,则退出循环*/
        {
            if (oh == 8)                       /*如果按下的是向前删除键,则...*/
            {
                if (count3)              /*如果密码串中字符数大于零,则向前删除一个字符*/
                {
                    //o--;
                    count3--;
                    printf("\b ");/*光标回退一格,将星号(*)改为空格*/
                    printf("\b"); /*光标重新回退一格*/
                }
            }
            else if ((oh <= 'Z'&&oh >= 'A') || (oh <= 'z'&&oh >= 'a') || (oh <= '9'&&oh >= '0'))
                /*如果输入的是密码的有效字符*/
            {
                printf("*");          /*输出一个星号*/
                o[count3++] = oh;
                // *o = oh;                /*记录密码内容*/
                // o++;
            }
            oh = getch();                    /*等待输入下一个字符*/
        }
        PassWord3[count3] = 0;
        if (strcmp(PassWord3, "woaic") == 0)
        {
            printf("登陆成功!\n");
            return 1;
        }
        else
        {
            count3 = 0;
            printf("密码输入错误!请重新输入:\n");
            printf("-------------------------------------------------------------------\n");
        }
    }
}
int changepassword() //changepassword函数,主要功能是修改密码,此函数是参考网上高手代码且进行修改
{
    while (1)
    {
        printf("这是你第一次登陆!请修改密码!\n");
        printf("\n");
        ch = getch();
        while (ch != 13 && count1 < MAX_PSD_LEN - 1)       /*当按下回车键或密码长度达到19,则退出循环*/
        {
            if (ch == 8)                       /*如果按下的是向前删除键,则...*/
            {
                if (count1)              /*如果密码串中字符数大于零,则向前删除一个字符*/
                {
                    //p--;
                    count1--;
                    printf("\b ");/*光标回退一格,将星号(*)改为空格*/
                    printf("\b"); /*光标重新回退一格*/
                }
            }
            else if ((ch <= 'Z'&&ch >= 'A') || (ch <= 'z'&&ch >= 'a') || (ch <= '9'&&ch >= '0'))
                /*如果输入的是密码的有效字符*/
            {
                printf("*");          /*输出一个星号*/
                count1++;
                //*p = ch;                /*记录密码内容*/
                //p++;
            }
            ch = getch();                    /*等待输入下一个字符*/
        }
        PassWord1[count1] = 0;
        printf("\n");
        printf("请再次输入你的密码!\n");
        qh = getch();
        while (qh != 13 && count2 < MAX_PSD_LEN - 1)       /*当按下回车键或密码长度达到19,则退出循环*/
        {
            if (qh == 8)                       /*如果按下的是向前删除键,则...*/
            {
                if (count2)              /*如果密码串中字符数大于零,则向前删除一个字符*/
                {
                    //q--;
                    count2--;
                    printf("\b ");/*光标回退一格,将星号(*)改为空格*/
                    printf("\b"); /*光标重新回退一格*/
                }
            }
            else if ((qh <= 'Z'&&qh >= 'A') || (qh <= 'z'&&qh >= 'a') || (qh <= '9'&&qh >= '0'))
                /*如果输入的是密码的有效字符*/
            {
                printf("*");          /*输出一个星号*/
                count2++;
                //*q = qh;                /*记录密码内容*/
                //q++;
            }
            qh = getch();                    /*等待输入下一个字符*/
        }
        PassWord2[count2] = 0;
        if (strcmp(PassWord1, PassWord2) == 0)
        {
            printf("\n");
            printf("密码修改成功!请记住密码!\n");
            printf("\n");
            return 2;
        }
        else
        {
            count1 = 0;
            count2 = 0;
            printf("两次输入不一致!请重新登录!");

        }

    }

}

[此贴子已经被作者于2016-1-4 12:02编辑过]


编程破防线
2016-01-04 11:48
eFun
Rank: 6Rank: 6
等 级:禁止访问
威 望:1
帖 子:58
专家分:400
注 册:2015-12-27
得分:0 
你认为你读懂我的修改了并在changpassword里做了相关修改?也许这个函数不需要类似修改呢?。
2016-01-04 12:17
润润编程
Rank: 1
来 自:广东省
等 级:新手上路
帖 子:20
专家分:0
注 册:2015-11-2
得分:0 
回复 9楼 eFun
。不做修改的话 两次输入不一致后 再次修改密码的话 无论是否一致都会显示错误。如果修改的话 输入是否一致都会显示两次输入输入一致 登录成功。哎,不会弄了。只能求助大神你了!

编程破防线
2016-01-04 12:24



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-460800-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023456 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved