• 信息管理代码分析<一>登录密码


    题解:这段代码的要求如下,输入一段字符密码(长度<=8)以二进制的形式存放在磁盘中,在输入时需要验证两次输入是否正确。
    第二个,登录。从磁盘中读取这个文件,然后再输入密码,看两者是否相同。

    1. 登录密码需要用到的知识
    2. 读取密码的注意点
    3. 登录密码检测

    登录密码需要用到的知识
    1.getch()取字符无回显。
    2.strcmp()比较两个字符串是否相等(相等返回0)
    3.对输入字符的检测(包括对回车符的判定)
    代码如下:

    #include "stdio.h"
    #include "conio.h"
    #include "string.h"
    char a[9],b[9];
    void logon()
    {
        FILE *fp;
        int i,j;
        do{
        for(i=0;i<8 && ((a[i]=getch())!='
    ');i++)
        putchar('*');
        printf("
    再次输入密码
    ");
        for(j=0;j<8 && ((b[j]=getch())!='
    ');j++)
        putchar('*');
        a[i]='';
        b[j]='';
        if(strcmp(a,b)!=0)
            printf("
    输入错误,请重新输入!
    ");
        else
            break;
        }while(1);
        fp=fopen("password.dat","wb");
        i=0;
        while(a[i])
        {
            putc(a[i],fp);
            i++;
        };
    }
    int main()
    {
        logon();
        return 0;
    }
            
    View Code

    读取密码的注意点
    假如二进制文件中存放一个密码,已知密码长度<=8,如何读取密码?
    由于在后面需要比较,所以使用字符串来存储,但是字符串又需要一个结束符,所以字符串的最大长度为9,得到:char pwd[9];
    而密码的长度分为两种情况:
    第一种,密码长度<8
    第二种:密码长度最大=8
    而在外存中的密码存储形式为:***** -1 ^(共中-1为eof),现在根据while(!feof(fp))来判定,会多读取一个字符。

    while(!feof(fp) && i<8)
    pwd[i++]=fgetc(fp);

    如果密码长度正好等于8,则循环结束后,i=8;如果密码长度小于8,比如=3,则循环结束后,i=4,数组pwd获得的数据为:
    * * * -1,而i当前又等于4,所以要把这个-1置为字符串结束符,得到:pwd[i-1]=0。
    最终,在判定上分为两种可能

    while(!feof(fp) && i<8)
    {
        pwd[i++]=fgetc(fp);
    }
    if(i==8)pwd[i]='';
    else pwd[i-1]='';

    登录密码检测
    有一个特别的地方是如果输入3次错误则返回,模型如下:

    void logon()
    {
        int n=3;
        do
        {
            ..
            if(密码不同)
            {
                ..;
                n--;
            }
        }while(n>0);
        ..
    }
  • 相关阅读:
    idea导入项目之后不显示maven的解决办法
    idea无法导入Junit Test进行测试
    ip2region通过ip获得地址
    SpringBoot 项目打成 .exe 程序,实战来了!
    多线程使用不当导致的 OOM
    linux常用命令
    Cypress 第一个脚本
    Portainer 容器IP 固定
    docker 单机hadoop 20220723 sequenceiq/hadoopdocker:2.6.0
    Springcloud aliBaBa+k8s+hadoop 20221012笔记本
  • 原文地址:https://www.cnblogs.com/tinaluo/p/5343565.html
Copyright © 2020-2023  润新知