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 2023年5月23日
    00
  • C语言进阶之文件操作详解

    C语言进阶之文件操作详解 在C语言中,文件操作是一项非常重要的操作,涉及到了文件的创建、读写、修改、删除等各种操作。本文将针对文件操作的各个方面进行详细讲解。 文件的创建 在C语言中,文件的创建可以通过标准库函数 fopen() 来实现,其函数原型如下所示: FILE *fopen(const char *filename, const char *mode…

    C 2023年5月23日
    00
  • C++中基类和派生类之间的转换实例教程

    C++中基类和派生类之间的转换实例教程 什么是基类和派生类呢? 在C++中,基类和派生类是面向对象编程中的两个基本概念。基类通常是一个抽象的概念,它定义了一些通用的特征,在派生类中被继承和扩展。派生类则是从基类派生出来的类,它继承了基类的特性,并在此基础上增加了一些自己的特性。 转换示例 我们来看一个实际的示例,假设现在我们有一个基类People,和一个派生…

    C 2023年5月22日
    00
  • 浅谈C++模板元编程

    浅谈C++模板元编程 C++模板元编程是一种使用C++模板技术进行编程的方法,它通过编写模板类或函数来实现在编译时进行计算和处理数据的能力。模板元编程相较于传统C++编程可以提供更高的性能和更加灵活的代码结构,因此被广泛应用于一些高性能计算和编译器开发等领域。 模板元编程的基本概念 在进行模板元编程时,我们需要了解以下几个基本概念: 模板参数 模板参数是指在…

    C 2023年5月23日
    00
  • mac外接显示器没反应怎么办? mac外接显示器无信号原因分析

    Mac外接显示器没反应怎么办? 问题描述 当我们在使用Mac电脑的时候,有时需要将其接入到外接显示器上进行扩展,这样可以提高工作效率,但是有时会遇到显示器无法正常显示出图像的情况,以下就对这个问题进行分析解决。 解决步骤 步骤一:检查连接线 第一步要检查的是连接线是否正确连接。通常外接显示器使用的是HDMI、DVI或者VGA接口,所以需要确保连接线与显示器接…

    C 2023年5月24日
    00
  • C语言科学计算入门之矩阵乘法的相关计算

    C语言科学计算入门之矩阵乘法的相关计算 什么是矩阵乘法? 矩阵乘法是一种常见的矩阵计算方式,它可以用来解决多个线性方程组的问题。 假设有两个矩阵 $A$ 和 $B$,它们的维度分别为 $m \times n$ 和 $n \times k$,则它们的乘积是一个 $m \times k$ 的矩阵 $C$,公式为: $$C_{i,j} = \sum_{r=1}^{…

    C 2023年5月22日
    00
  • vscode和cmake编译多个C++文件的实现方法

    针对”vscode和cmake编译多个C++文件的实现方法”这个问题,我将提供详细的攻略如下。 1. 建立项目 首先,在VS Code中选择一个空文件夹作为你的项目,使用快捷键 Ctrl + Shift + P 或者点击左侧的终端->新建终端(Terminal),打开终端面板并输入以下命令,初始化你的C++项目: mkdir build cd buil…

    C 2023年5月23日
    00
  • 在C语言中向链接列表添加节点

    下面是在C语言中向链接列表添加节点的完整使用攻略。 什么是链接列表 链接列表(Linked List)是由多个节点组成的数据结构,每个节点包含一个数据元素和指向下一个节点的指针。 链接列表的优点是可以高效地插入和删除节点,而且不需要预先知道列表的大小。但缺点是访问任意一个节点的时间复杂度为O(n),不如数组高效。 如何向链接列表添加节点 首先,我们需要定义节…

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