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日

相关文章

  • 战舰世界 国服2.1商城折扣 C系洛阳DD新春价257

    战舰世界 国服2.1商城折扣攻略 一、前言 战舰世界正在进行国服2.1版本的商城折扣活动,其中C系洛阳级驱逐舰的新春价为257元,相较于原价有一定的优惠。 本篇攻略详细介绍了如何在该活动中购买到C系洛阳级驱逐舰,并说明了购买过程中需要注意的事项。 二、购买流程 1. 登录战舰世界官网 在浏览器中输入 https://worldofwarships.cn/ 进…

    C 2023年5月22日
    00
  • C++实例代码详解友元函数

    C++实例代码详解友元函数 友元函数概念 友元函数是指可以访问一个类的私有成员和保护成员的非成员函数。友元函数不是类的成员函数,但是它可以访问类中的非公有成员。需要注意的是,友元函数不会被继承。 友元函数的语法格式如下: friend return_type function_name( parameter_list ); 其中,关键字 friend 声明了…

    C 2023年5月24日
    00
  • C++实现洗牌发牌排序功能的示例代码

    下面我将为你讲解“C++实现洗牌发牌排序功能的示例代码”具体攻略。 1. 洗牌发牌排序功能 1.1 功能描述 洗牌发牌排序是常见的扑克牌游戏中的基本功能,其具体流程如下: 洗牌:将一副牌按随机顺序重新排列; 发牌:将洗牌过后的牌等分给参与游戏的玩家; 排序:玩家根据手中牌的大小进行排序。 1.2 示例代码 下面将通过示例代码来讲解如何实现洗牌、发牌和排序功能…

    C 2023年5月30日
    00
  • C++中Boost的智能指针scoped_ptr

    C++中Boost的智能指针scoped_ptr 简介 C++中的RAII(资源获取即初始化)技术可以帮助程序员在程序运行过程中自动管理资源的分配和释放,以避免资源泄漏等问题。RAII技术的实现依赖于智能指针,在C++标准库中,已经提供了shared_ptr、unique_ptr和weak_ptr等智能指针类型,但是这些类型都不是线程安全的。 Boost库是…

    C 2023年5月23日
    00
  • C++类和对象之类的6个默认成员函数详解

    C++类和对象之类的6个默认成员函数详解 什么是类和对象 类是一种用户自定义的数据类型,用于描述一组具有相同属性和行为的对象的集合。一个类可以包含数据成员和成员函数(也称为方法),这些成员封装了类的状态以及处理这些状态的操作。 对象是类的实例,它是使用类定义的变量。每个对象都具有自己的状态和行为,但所有对象都共享类的数据成员和成员函数。 默认成员函数 在C+…

    C 2023年5月22日
    00
  • 用C/C++来实现 Node.js 的模块(一)

    首先需要明确的是,Node.js使用C++编写的,通过V8引擎来解释JavaScript代码,但同时也支持将C/C++代码编译成Node.js模块,嵌入到JavaScript中使用。这种特性被广泛应用,比如Node.js标准库中的fs和http模块就是通过C/C++来实现的。 要用C/C++来实现Node.js的模块,通常需要遵循以下几个步骤: 从Node.…

    C 2023年5月23日
    00
  • C语言创建和使用不透明指针

    C语言创建和使用不透明指针 什么是不透明指针 不透明指针是一种指针类型,在定义时不指定指向的数据类型,编译器无法确定指针所指向的数据的内存大小和类型,从而使得指向的数据对用户来说是不可见的,只有通过特定的函数接口才能访问到对应的数据。 不透明指针的常见应用场景是在某些库中,对外部提供一些数据类型,但是不希望把具体的实现细节暴露给外部使用者。 不透明指针的创建…

    C 2023年5月10日
    00
  • Java中的相除(/)和取余(%)的实现方法

    Java中的相除(/)和取余(%)是常见的算术运算符,可以用于两个整数的运算。相除会得到一个除法的商,取余会得到一个除法的余数。 相除 在Java中实现相除可以使用除法运算符(/)。除法运算符用于两个整数的相除运算,并得到商。除法运算符具有左结合性。以下是一个示例说明: int a = 7; int b = 3; int c = a / b; System.…

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