C语言模拟实现密码输入的示例代码

yizhihongxing

下面是关于“C语言模拟实现密码输入的示例代码”的完整攻略。

一、问题描述及解决思路

在C语言中,实现密码输入的方式一般是通过scanfgets函数来实现。但这两种方式都有一个共同的问题,就是在输入密码时,密码会被明文显示在屏幕上,存在安全隐患。因此,为了提高系统的安全性,可以使用一些特殊的函数来模拟实现密码输入功能。

在C语言中,实现密码输入可以借助于Windows API中提供的getchgetche函数,它们分别可以读取一个字符并且不回显和读取一个字符并且回显。通过这两个函数,我们就可以实现输入密码时不显示明文的效果。

二、具体实现方法

下面是getchgetche两个函数的示例如下:

#include <conio.h>  //包含getch和getche函数

//示例1:使用getch实现密码输入
#include <stdio.h>

void main()
{
    char password[20];
    int i = 0;

    printf("Please enter your password: ");

    while(1)
    {
        password[i] = getch();  //在输入密码时不显示输入的字符
        if(password[i] == '\n' || password[i] == '\r')  //如果输入的是回车或换行符,则退出输入
        {
            password[i] = '\0';
            break;
        }
        else if(password[i] == '\b' && i > 0)  //如果输入的是退格键,则删除前一个字符
        {
            i--;
            printf("\b \b");
        }
        else if(i < 19)  //如果输入的不是特殊字符,且密码位数不超过20,则存储输入的字符
        {
            putchar('*');  //输出*代替输入字符
            i++;
        }
    }

    printf("\nYour password is: %s\n", password);
}

//示例2:使用getche实现密码输入
#include <stdio.h>

void main()
{
    char password[20];
    int i = 0;

    printf("Please enter your password: ");

    while(1)
    {
        password[i] = getche();  //在输入密码时显示输入的字符
        if(password[i] == '\n' || password[i] == '\r')  //如果输入的是回车或换行符,则退出输入
        {
            password[i] = '\0';
            break;
        }
        else if(password[i] == '\b' && i > 0)  //如果输入的是退格键,则删除前一个字符
        {
            i--;
            printf("\b \b");
        }
        else if(i < 19)  //如果输入的不是特殊字符,且密码位数不超过20,则存储输入的字符
        {
            i++;
        }
    }

    printf("\nYour password is: %s\n", password);
}

需要注意的是,两个示例使用的都是无限循环语句while(1),并且在输入密码的过程中使用了break语句来退出循环。在每次输入字符时,都需要对输入的字符进行判断,如果是回车或者是换行符,则退出循环,否则就会将输入的字符存储到字符数组password中,并输出一个*代替输入的字符。如果输入的是退格键,则会删除前一个输入字符。

三、示例说明

示例1和示例2的区别在于,在示例1中使用了getch函数,输入密码时不显示输入的字符;在示例2中使用了getche函数,输入密码时显示输入的字符。这两个函数在使用时需要包含conio.h头文件。另外,上述示例中实现了一些简单的异常处理措施,比如当输入非法字符时,程序不会崩溃,而是忽略这些非法字符并继续等待用户输入。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言模拟实现密码输入的示例代码 - Python技术站

(0)
上一篇 2023年5月24日
下一篇 2023年5月24日

相关文章

  • C语言指针和多维数组

    关于C语言指针和多维数组的使用攻略,我们分两部分来讲解。 C语言指针的使用攻略 C语言中的指针可以说是一个比较重要的概念,它是一种变量,其值为另一个变量的地址。因为可以通过指针访问变量的地址,所以我们在进行一些操作时,指针会大显身手。下面是一些指针的基本使用: 指针变量的定义 指针变量在定义时必须在变量名前面加上“*”号,如下所示: int *p; 这里定义…

    C 2023年5月9日
    00
  • 将List对象列表转换成JSON格式的类实现方法

    将List对象列表转换成JSON格式,一般使用JSON工具库实现,如Jackson和Gson。下面将分别介绍Jackson和Gson两个库的实现方法。 Jackson 步骤一:导入Jackson库 在pom.xml文件中添加以下依赖: <dependencies> <dependency> <groupId>com.fas…

    C 2023年5月23日
    00
  • 详细介绍Java关键字throw throws Throwable的用法与区别

    详细介绍Java关键字 throw, throws, Throwable 的用法与区别 在Java程序中,异常处理是必不可少的一部分。Java中的异常是指程序在执行过程中发生错误或异常情况时,根据不同的情况产生不同的异常信息。Java中有三个关键字:throw, throws, Throwable,它们是处理Java异常的重要工具。 throw关键字 thr…

    C 2023年5月23日
    00
  • C程序 查找矩阵的法向量和迹向量

    C程序 查找矩阵的法向量和迹向量 使用攻略 功能简介 该C程序实现了查找矩阵的法向量和迹向量的功能。其中,法向量为矩阵每一行的平均值组成的向量,迹向量为矩阵的对角线上元素的和。 环境要求 操作系统:Windows、Linux、MacOS等 编译器:gcc、clang等 使用步骤 安装编译器 如果您的计算机中没有相应的C语言编译器,您需要先安装相应的编译器。其…

    C 2023年5月9日
    00
  • C语言实现的PNPoly算法代码例子

    以下是关于C语言实现的PNPoly算法的完整攻略: 什么是PNPoly算法 PNPoly(Point in Polygon)算法是一种用于判断一个点是否在一个2D多边形区域内的算法。此算法的原理是基于射线法,通过从测试点发射一条水平向右的射线,若与多边形的边有交点,则将计数器加1,若与多边形的边重合,则不加计数,最终通过计数器奇偶性判断点是否在多边形内。 实…

    C 2023年5月23日
    00
  • 利用c++编写简易版2048小游戏

    利用C++编写简易版2048小游戏攻略 1. 程序概述 2048是一款经典的数字游戏,玩家在4*4的棋盘上操作数字合并,最终得到2048为胜利。我们可以使用C++编写一个简易版的2048小游戏,让用户可以通过控制台进行游戏。 2. 实现步骤 2.1 定义游戏类 我们首先需要定义一个游戏管理类,用于管理游戏的所有操作。在类的定义中包含如下属性和方法: 2.1.…

    C 2023年5月23日
    00
  • C++实现校园导游系统

    C++实现校园导游系统攻略 系统概述 本系统利用C++实现了校园导游的功能,用户可以在系统中选择要参观的景点,并得到相关的信息如景点介绍、地址、开放时间等。同时,用户还可以在地图上查看各个景点的位置和路线,方便用户进行导览。 功能模块 本系统主要分为以下模块: 景点数据读入模块,用于从文件中将景点信息读入内存。 景点信息显示模块,用于在控制台上显示景点信息。…

    C 2023年5月23日
    00
  • C/C++ 活动预处理器详解

    下面是对C/C++预处理器的详细讲解: C/C++预处理器简介 C/C++预处理器是C/C++编译过程中的一个重要环节,其作用是在编译之前对源代码进行处理解析,可以理解为是一种对源代码进行预处理的程序。C/C++预处理器用于在编译之前对源代码进行简单的替换和操作,以便更好地对源代码进行编译和调试。 C/C++预处理器主要有以下几个作用: 头文件包含:将头文件…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部