常用功能函数-密码登陆函数

密码登陆-功能函数

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h> //包含getch(); 从控制台读取一个字符,但不显示在屏幕上

#pragma warning(disable:4996) //IDE默认禁止这种容易产生漏洞的旧函数,例如fopen(),现在需要使用fopen_s,要想使用旧函数,要加上这句

//检查是否是第一次进入系统
int checkFirst()
{
    int i;
    char pwd_first[9]; //新系统,第一次输入的密码数组
    char pwd_second[9]; //新系统,第二次输入的密码数组
    char password_input[9]; //正式输入的密码数组
    char password[9]; //正式输入的密码数组

    FILE *fp_read,*fp_write;
    fp_read = fopen("password.dat", "rb");
    if(!fp_read) //如果不存在password.dat,则进入if
    {
        printf("\n新系统,请输入相应的初始化操作!\n");
        //getchar();
        do
        {
            printf("\n设置密码,请不要超过8位:");
            //getch() - 从控制台读取一个字符,但不显示在屏幕上
            //CR用符号‘\r‘表示, 十进制ASCII代码是13, 十六进制代码为0x0D;
            //LF使用‘\n‘符号表示, ASCII代码是10, 十六制为0x0A.
            for (i = 0; i < 8 && (pwd_first[i] = getch()) != ‘\r‘;i++)
            {
                putchar(‘*‘);
            }
            pwd_first[i] = ‘\0‘; //不加‘\0‘,只是字符数组,不能使用strcmp进行比较

            printf("\n请再次设置密码,请不要超过8位:");
            for (i = 0; i < 8 && (pwd_second[i] = getch()) != ‘\r‘; i++)
            {
                putchar(‘*‘);
            }
            pwd_second[i] = ‘\0‘;

            if ( strcmp(pwd_first,pwd_second) == 0 )
            {
                printf("\n密码输入成功! \n");
                break; //跳出循环
            }
            else
            {
                printf("\n2次密码不一致,请重新输入!\n");
                system("PAUSE"); //暂停
                system("CLS"); //清屏
            }

        } while (1);

        //fclose(fp_read); //error,不能先关闭,否则后面打开password.dat会失败

        //将密码写入到密码文件中
        fp_write = fopen("password.dat", "wb");
        if (!fp_write)
        {
            printf("\n密码文件打开失败,则系统创建失败!\n");
            return -1;
        }

        i = 0;
        while (pwd_first[i])
        {
            putw(pwd_first[i], fp_write); //putw为写入单个字符的函数
            i++;
        }
        fclose(fp_write);
        printf("\n系统初始化成功,按任意键退出后,再重新进入!\n");
        exit(0);
    }
    else
    {
        i = 0;
        while ( !feof(fp_read) && i<8 ) //判断是否读完密码文件
        {
            pwd_first[i] = getw(fp_read); //从文件流中读出字符赋值给pwd_first数组
            i++;
        }
        pwd_first[i-1] = ‘\0‘; //使用feof()读取文件内容,总是会多读取一次,假如字符个数为3,则会读取4次,i==4,所以i要减1

        int n = 0;
        do
        {
            printf("\n请输入密码,请不要超过8位:");
            for (i = 0; i < 8 && (password[i] = getch()) != ‘\r‘; i++)
            {
                putchar(‘*‘);
            }
            password[i] = ‘\0‘;

            if (strcmp(password, pwd_first) != 0)
            {
                printf("\n密码错误,请重新输入!\n");
                n++;
                system("PAUSE"); //暂停
                system("CLS"); //清屏
            }
            else
            {
                system("CLS"); //清屏
                printf("密码正确!\n");
                system("PAUSE"); //暂停
                system("CLS"); //清屏
                break; //密码正确,退出函数,继续向下执行
            }

        } while(n<3);

        if(n >= 3)
        {
            printf("请退出,你已经输入三次错误密码!\n");
            exit(1);
        }

    }

    return 0;
}

int _tmain(int argc, _TCHAR* argv[])
{
    checkFirst();    //检查是否是第一次进入系统

    printf("\n成功进入系统!\n");
    return 0;
}

第一次进入新系统:

 第二次进入系统,输入密码,密码正确:

原文地址:https://www.cnblogs.com/linuxAndMcu/p/9742058.html

时间: 2024-10-12 16:06:56

常用功能函数-密码登陆函数的相关文章

用函数实现登陆功能(三次机会),然后在主函数中根据调用后的结果判断 登陆成功与否。

/*3.用函数实现登陆功能(三次机会),然后在主函数中根据调用后的结果判断登陆成功与否.*/#include <string.h>int numb(char use[] ,char password[] ){ if((strcmp(use,"zhouyi")==0)&&(strcmp(password,"nb")==0)) { return 1; } else { return 0; } } #include <stdio.h>

【ORACLE】ORACLE常用功能函数

ORACLE常用函数功能演示 文档撰写:孟祥新 写在前面: ORACLE内置函数,相当于C语言中的库函数,提供了常规数据库编程中所需的绝大多数基本功能,并且通过函数的组合或嵌套使用,可以发挥其强大的功能.由于这些内置函数都是由ORACLE公司的编程大家所写,而且其执行代码是内嵌在ORACLE数据库系统中的,因此其执行效率极高. 在数据库编程中能广泛使用ORACLE所提供的内置函数,将大大提高程序代码的执行效率."站在高人的肩膀上,将使你变得更高". 演示之前的环境设置: 为了在SQL*

Python常用功能函数

Python常用功能函数汇总 1.按行写字符串到文件中 import sys, os, time, json def saveContext(filename,*name): format = '^' context = name[0] for i in name[1:]: context = context + format + str(i) context = str(context).replace('(','(').replace(')',')').replace(',',',').re

re模块中常用功能函数

re模块中常用功能函数 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式. re 模块使 Python 语言拥有全部的正则表达式功能. compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象.该对象拥有一系列方法用于正则表达式匹配和替换. re 模块也提供了与这些方法功能完全一致的函数,这些函数使用一个模式字符串做为它们的第一个参数. re.match函数

笔试题中的常用功能函数

1. 请编写一个C 函数,该函数将给定的一个整数转换成字符串. void IntToCharChange(int num,  char* pval) { char strval[100]; int i , j; int val0 = 0; int val1 = 0; val0 = num; for(i=0; i<100; i++) { val1 = val0 % 10; //取余val0 = val0 / 10; // 取整strval[i] = val1 + 48;  // 数字-字符if(v

ssh key 免密码登陆服务器,批量分发管理以及挂载远程目录的sshfs 功能

ssh key 免密码登陆服务器,批量分发管理以及挂载远程目录的sshfs 第一部分:使用ssh key 实现服务器间的免密码交互登陆 步骤1: 安装openssh-clients [[email protected] ~]# yum install openssh-clients -y 步骤2: 创建用户,所有机器同时操作,可直接使用root [[email protected] ~]# useradd test #如果使用root,这里跳过 [[email protected] ~]# ec

EL表达式 JSTL的标签库 EL的函数 自定义EL函数 自定义标签 JSP的开发模式 注册登陆案例

EL表达式 JSTL的标签库 EL的函数 自定义EL函数 自定义标签 JSP的开发模式 注册登陆案例 EL表达式 1.获取域对象中的值 2.EL表达式支持运算 ${ num1 + num2 } EL获取常用的WEB对象 1.pageScope 获取page域对象的值 2.requestScope 获取request域对象的值 3.sessionScope 获取session域对象的值 4.applicationScope 获取application域对象的值 * 例子:向某个域中来存入值 req

C++编程常用头文件及其包含函数汇总

1. #include<iostream>是标准的C++头文件,任何符合标准的C++开发环境都有这个头文件. 当使用<iostream.h>时,相当于在c中调用库函数,使用的是全局命名空间,也就是早期的c++实现:当使用<iostream>的时候,该头文件没有定义全局命名空间,必须使用namespace std:这样才能正确使用cout.   2.#include <cstdlib>是C++里面的一个常用函数库, 等价于C中的<stdlib.h>

自定义的常用文件与目录操作函数库

自定义的常用文件与目录操作函数库,在win和linux平台做了跨平台的处理.(跨平台的处理可以作为参考比较.在win下目录的符号可以是\或者/,但是在linux下只能是/.) 下面给出的是源文件,实现接口函数的代码.每个接口函数都有很详细的功能说明. /* 判断文件或目录是否存在 * 在操作系统中,目录也是一个文件,如果要判断一个目录是否存在则应当使用DirectoryExists, * 要判断一个文件是否存在且是一个归档文件则应当使用IsArchive. * @如果文件或目录存在则返回true