标题:简单密码匹配程序的小问题
只看楼主
弗朗先生
Rank: 1
等 级:新手上路
帖 子:23
专家分:8
注 册:2011-11-18
结帖率:83.33%
 问题点数:0 回复次数:5 
简单密码匹配程序的小问题
登录1.rar (1.65 KB)
新手,写了个类似与登录密码匹配的小程序。
现在有些小问题。
⒈密码的保存可不可以不要单独存放在文件中(容易被误删除)。
⒉代码最后修改密码的change()函数调用后,如果再继续执行loading()函数就会出错,这是怎么回事呢?
代码我copy在下面了,附件里面也上传了一份。
程序代码:
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#include"conio.h"
void loading();
void login();
void choice();
void change();
int main(void)
{
    loading();
    return 0;
}
void loading()
{
    FILE*fp;
    int i,n;
    char Password[20],password_;
    char ch[20];
    int len=0;
    if((fp=fopen("data.in","r"))==NULL)
    {
        printf("\n\n\n\t\t\t首次登录请设置密码\n\t\t\t");
        change();
        return;
    }
    while(ch[len]!='\0')
        fscanf(fp,"%s",&ch[len++]);
    fclose(fp);
    //*******************************
    char password[20];
    if((fp=fopen("data.in","r"))==NULL)
    {
        printf("open file error!");
        getch();
        return ;
    }
    fgets(password,len+1,fp);
    fclose(fp);
    //我是华丽的分割线*************************************
    printf("\n\n\n");
    for(n=1;n<=3;n++)//给密码三次输入机会
    {
        printf("    密码:");
        for(i=0;i<len;)//密码要求为八位
        {
            password_=getch();
            if(password_>='0' && password_<='9'||password_>='a' && password_<='z'||password_>='A' && password_<='Z')//要求密码由1--9之间的数字组成
            {
                Password[i++]=password_;
                printf("*");
            }
        }
        Password[i]='\0';
        printf("\n");
        /****也是分割线*******************************************************************************/
        if(strcmp(Password,password)==0)//***********判断密码是否正确
        {
            system("cls");
            printf("\n\n\n\n\n恭喜您,登录成功!\n");
            system("pause");
            choice();
            exit(0);
        }
        else
        {
            if(n<3)//**************若密码错误,提示并警告
            {
                printf("    密码错误,请重新输入,您还有%d次机会!\n",3-n);
                system("pause");//屏幕停顿,按任意就按继续___这条命令等同于getch();
                system("cls");//清屏
            }
            else
            {
                printf("    密码错误次数超过三次,退出!\n");break;//**********密码错误超限,退出
            }
        }
   
        /************还是分割线************************************************************/
    }
}
void choice()
{
    char k;
    printf("\n\n\t\t\t键入1,启动程序!\n");
    printf("\t\t\t键入2,返回登录界面!\n");
    printf("\t\t\t键入3,修改密码!\n");
    printf("\t\t\t键入4,直接退出程序!\n");
    printf("\t\t\t");
    k=getch();
    switch(k)
    {
    case '1':        login();break;
    case '2':        loading();break;
    case '3':        change();break;
    case '4':        exit(0);
    default:    printf("请重新键入!\n");
        system("cls");
        system("pause");
        break;
    }
}
//大家好,我上一条分割线的弟弟,我仍然叫分割线***********************
void login()
{
    printf("login函数成功执行!!\n\t\t\t");
    getch();
    return;
}
//我是最后的分割线**************************************************
void change()
{
    FILE *fp;
    char ch;
    if((fp=fopen("data.in","w"))==NULL)
    {
        printf("can't open file when change");
        return ;
    }
    printf("请输入密码,并以'#'结束\n");
    while((ch=getch())!='#')
    {
        fputc(ch,fp);
        printf("*");
    }
    printf("\n");
    fclose;
    printf("\t\t\t您已修改密码,请重新登录!\n\t\t\t");
    system("pause");
    system("cls");
//    loading();//加入此行代码后选择修改密码时正常,但是重新登录时会出错,“data.in”文件为空!
    return;
}
请教一下解决的办法,谢谢!
搜索更多相关主题的帖子: 修改密码 登录密码 loading change 
2011-11-29 22:39
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
得分:0 
回复 楼主 弗朗先生
printf("\n");   
fclose;  //关闭文件错了   
printf("\t\t\t您已修改密码,请重新登录!\n\t\t\t");

总有那身价贱的人给作业贴回复完整的代码
2011-11-29 23:11
弗朗先生
Rank: 1
等 级:新手上路
帖 子:23
专家分:8
注 册:2011-11-18
得分:0 
回复 2楼 embed_xuel
呃…这个真是!!!
我自己检查了几次。
居然是这里…
十分感谢了!
2011-11-30 11:44
弗朗先生
Rank: 1
等 级:新手上路
帖 子:23
专家分:8
注 册:2011-11-18
得分:0 
回复 2楼 embed_xuel
还想请教一下,那个存储密码信息的文件的问题有没有办法解决呢?
2011-11-30 11:46
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
得分:0 
密码可以不放在文件里,可以放的地方多了,放数据库里,放注册表里,直接写入EXE里,任你选。

我们都在路上。。。。。
2011-11-30 11:58
弗朗先生
Rank: 1
等 级:新手上路
帖 子:23
专家分:8
注 册:2011-11-18
得分:0 
回复 5楼 hellovfp
直接写入EXE怎样实现呢?用全局变量吗?
2011-11-30 17:57



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




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

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