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

下面是关于“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语言中,目标文件主要分为三种类型:可重定位目标文件、可执行目标文件和共享目标文件。 可重定位目标文件 可重定位目标文件是编译器编译完源代…

    C 2023年5月23日
    00
  • C语言 指针和数组

    让我们来详细讲解一下C语言中指针和数组的使用攻略。 指针和数组 指针 指针是一种特殊的变量,其存储的是另一个变量的地址。在C语言中,可以通过指针来访问和修改该变量的值,也可以用指针来实现动态内存分配。指针变量的声明格式如下: type *name; 其中,type是指针变量所指向变量的类型,name是指针变量的名称。 指针操作符 按照指针操作的不同,可以将指…

    C 2023年5月9日
    00
  • php格式化json函数示例代码

    PHP格式化JSON函数示例代码 在PHP中,有一个很方便的函数可以帮助我们格式化JSON字符串。这个函数就是json_encode()。它使用非常简单,只需要将我们要格式化的JSON对象传入函数中即可。 例如,我们有一个如下所示的JSON字符串: { "name": "Tom", "age": 3…

    C 2023年5月23日
    00
  • 详解QListWidget如何实现自定义Item效果

    下面是详细讲解“详解QListWidget如何实现自定义Item效果”的完整攻略。 1. QListWidget简介 QListWidget是QT中常用的一个列表控件,它能够方便地显示列表数据,并且还支持很多常用的操作,比如单选、多选、拖拽等。在QListWidget中,默认的Item是由QListWidgetItem类提供的,它能够显示一些基本的文本、图标…

    C 2023年5月23日
    00
  • Linux下编译C程序的过程

    下面我会详细讲解如何在Linux系统下编译C程序的完整攻略,流程如下: 步骤一:安装gcc编译器 打开终端,使用以下命令安装gcc编译器: sudo apt-get update sudo apt-get install gcc 安装完成后可以使用以下命令检验是否安装成功: gcc -v 如果出现版本号信息,则表明安装成功。 步骤二:编写C程序 用文本编辑器…

    C 2023年5月23日
    00
  • 利用Mongoose让JSON数据直接插入或更新到MongoDB

    下面我就详细讲解利用Mongoose让JSON数据直接插入或更新到MongoDB的攻略。 1. 环境准备 在开始操作之前,我们需要先安装MongoDB和Mongoose,并确保本地MongoDB服务已经启动。 安装Mongoose可以直接使用npm命令: npm install mongoose –save 2. 连接MongoDB数据库 在使用Mongo…

    C 2023年5月23日
    00
  • Python使用PyCrypto实现AES加密功能示例

    我来详细给您讲解一下“Python使用PyCrypto实现AES加密功能示例”的完整攻略。 简介 首先,让我们来了解一下PyCrypto和AES加密。 PyCrypto PyCrypto是Python的一个第三方库,可以实现多种加密算法,如AES、RSA、DES等。 AES加密 AES(Advanced Encryption Standard)是一种对称加密…

    C 2023年5月23日
    00
  • C语言实现3个数从小到大排序/输出的方法示例

    C语言实现3个数从小到大排序/输出的方法示例 问题描述 C语言中如何实现3个数从小到大排序/输出? 解决方案 #include <stdio.h> int main() { int a, b, c; printf("请输入三个整数:\n"); scanf("%d%d%d", &a, &b, …

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