使用getchar()函数实现,输入密码时回显*号

 前言

         当我们在做一个类似于银行登录系统,或者其他登录系统,在用户登录的时候,为了不让输入的密码显示在屏幕上,以提高安全性的时候,我们可以选择用户输入密码的时候回显出*号来代替密码显示在屏幕上,从而达到提高安全性的目的。

        这时候我们就想到了一个函数,看一下它的解释...

        getch ()是编程中所用的函数,这个函数是一个不回显函数,当用户按下某个字符时,函数自动读取,无需按回车,有的C语言命令行程序会用到此函数做游戏,但是这个函数并非标准函数,要注意移植性! 用ch=getch ();会等待你按下 任意键 之后,把该键 字符 所对应的ASCII码赋给ch,再执行下面的语句。

特别是红色字体的部分,所以在Linux系统中使用这个函数,是非常的麻烦,我还没有找到它在Linux系统里面使用的方法,所以我在网上找了一个比较靠谱的博主,参考了一下他的思路,

正文

使用getchar()函数来实现输入密码回显*号的功能,实测可以使用,无需受移植性的问题困扰,在其基础上简化了部分代码。

#include <stdio.h>
#include <stdlib.h>

#define BACKSPACE  0x08   //删除键的asccll码值

int InputCode(char *pass)
{
	int i=0;
	system("stty -icanon");                   //设置一次性读完操作,即getchar()不用回车也能获取字符
	system("stty -echo");                     //关闭回显,即输入任何字符都不显示
	while(i < 16)                            //这里是输入密码的位数,可在定义输入密码的长度
	{
		pass[i]=getchar();                    //获取键盘的值到数组中
		if(i == 0 && pass[i] == BACKSPACE)        
		{
			i=0;                              	//若开始没有值,输入删除,则,不算值
			pass[i]='\0';
			continue;
		}
		else if(pass[i] == 127)
		{
			printf("\b \b");                    //若删除,则光标前移,输空格覆盖,再光标前移
			pass[i]='\0';
			i--;                              	//返回到前一个值继续输入
			continue;                           //结束当前循环
		}
		else if(pass[i] == '\n')              	 //若按回车则,输入结束
		{
			pass[i]='\0';
			break;
		}
		else
		{
			printf("*");				//使密码以*号输出
            i++;
		}
		
	}
	return 0;                            
}



int main(void)
{
	char pass[16];
	printf("请输入密码:");
	InputCode(pass);
	printf("\n密码:%s",pass);
    return 0;
   

}

效果图

今天的分享也到这里了,依然觉得做项目是巩固知识的最好方法,respect共勉!!

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三目条件

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值