控制台下星号密码输入的实现
最近频繁需要实现在windows控制台下输入星号密码的功能,Unix/Linux那种没有任何屏显的实现总感觉对用户不太友好。今天在自己的Linux代码库中发现了自己去年写图书馆管理系统的时候写的一个密码输入函数。索性拿来修改了接口并且重新优化了处理逻辑后移植到了windows下(其实也就是加上几句条件编译罢了)。代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
#ifndef _WIN32 // 如果不是WIN32环境,则要自定义getch()函数
#include <termio.h>
int getch(void)
{
struct termios tm, tm_old;
int fd = 0, ch;
if (tcgetattr(fd, &tm) < 0) {
return -1;
}
tm_old = tm;
cfmakeraw(&tm);
if (tcsetattr(fd, TCSANOW, &tm) < 0) {
return -1;
}
ch = fgetc(stdin);
if (tcsetattr(fd, TCSANOW, &tm_old) < 0) {
return -1;
}
return ch;
}
#else
#include <conio.h>
#endif // _WIN32
/*
* 密码输入函数,参数 passwd 为密码缓冲区,buff_len 为缓冲区长度
*/
char *passwd_input(char *passwd, int buff_len)
{
char str;
int i = 0;
int enter_num = 13;
int backspace_num;
#ifndef _WIN32
backspace_num = 127;
#else
backspace_num = 8;
#endif
if (passwd == NULL || buff_len <= 0) {
return passwd;
}
while (1)
{
// 如果没有按下退格键
if ((str = getch()) != (char)backspace_num) {
if (i < buff_len - 1) {
passwd[i++] = str;
printf("*");
}
} else {
if (i != 0) {
i--;
printf("\b \b");
}
}
// 如果按下了回车键
if (str == (char)enter_num) {
passwd[--i] = '\0';
if (i != buff_len - 1) {
printf("\b \b");
}
break;
} else if (str == -1) {
fprintf(stderr, "Error to set termio noecho.n");
}
}
return passwd;
}
/*
// 测试示例(请自行添加头文件)
int main(void)
{
char pass[7];
printf("亲,试试输入密码(长度限制 6):");
passwd_input(pass, 7);
printf("\n%s\n", pass);
return 0;
}
*/
|
转载于:https://www.cnblogs.com/csdndreamer/p/5490695.html
控制台下星号密码输入的实现相关推荐
- [心得]C语言中实现密码输入 回显星号*
C语言为密码输入提供了一函数getpass(); #include <stdio.h> #include <unistd.h> int main() { char *passw ...
- 【LFS】Cjktty+uim-fep实现Linux控制台下中文显示与输入
[LFS]Cjktty+uim-fep实现Linux控制台下中文显示与输入 需要准备的软件包 给内核打补丁,配置并编译安装新内核 编译安装UIM-FEP 后记: 操作环境:LFS-9.0 需要准备的软 ...
- flutter显示图标_flutter中密码输入如何切换隐藏/显示?
可以通过TextFormField的obscureText属性控制密码输入的隐藏/显示,示例代码如下:@override void initState() { passwordVisible = fa ...
- 微信小程序---密码输入
设计支付密码的输入框 效果如下: 源码:github地址:https://github.com/fiveTree/-_- 干货: <view class="pay"> ...
- java编程实现人物对打_Java Lab(1)控制台下的人物PK
一.前言 有这样一个念头很久了,从最早对编程感兴趣就是因为想实现一个类似于街霸.拳皇之类的程序.一路走过来,发现作为一个主业和编程毫无关系的人想学编程,真的是很费心很吃力,而在应用无比泛滥的今天,对于 ...
- 表单验证通过输入框获取用户输入的密码,如果输入密码为“happy123”,则显示“密码输入正确”,否则提示“密码输入错误”,如果输入三次,显示提示信息“三分钟后在尝试”
功能:简单的表单验证,密码输入次数控制,定时器控制可输入提醒,密码匹配 Html:请忽略界面设计,没时间做 <form><input id="userName" ...
- 如何让Python不回显获取密码输入
密码对程序员来说尤其重要.你不应该在不加密的情况下存储它们,而且你也不应该在用户输入密码的时候显示出输入的内容.当我决定要提高我的笔记本电脑的安全性时,这对我来说变得特别重要.我对我的家目录进行了加密 ...
- php 只能输入中英文,JavaScript基于正则实现控制输入框中只能输入中文、数字和英文的方法...
这篇文章主要介绍了JavaScript控制输入框中只能输入中文.数字和英文的方法,基于正则验证实现字符输入限制功能,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲述了Javascript控制输 ...
- webstorm中git密码输入错误,重置问题
webstorm中git密码输入错误,重置问题 今天遇到了一个问题. 因为我比较习惯使用webstorm编辑器,特别喜欢直接用里面的git工具. 当从远程仓库fetch下来代码时,提示输入用户名密码. ...
最新文章
- android 蓝牙数据分包_无线组网技术谁能问鼎云巅-蓝牙Mesh, ZIGBEE, THREAD
- linux环境安装nagiosgraph将nagios的性能数据绘制成动态图表?
- OpenGL从入门到精通--你好三角形
- 基于Axure的火车购票APP
- centos 6.2安装mysql_CentOS 6.2下安装MySQL_服务器知识学堂-中关村在线
- linux-新建一个centos虚拟机系统-安装全过程图示
- Python46 mysql备份
- python常用的库介绍_Python的标准库介绍与常用的第三方库
- 批量给pdf电子书添加页码书签
- Oracle锁表查看及处理
- python熊猫弹幕_python奇闻杂技05 爬虫初步学习+jieba分词+词云库+哔哩哔哩弹幕爬取示例(数据分析pandas)...
- 2015年春节往事小记
- 微信通讯录java实现的,小程序组件之仿微信通讯录的实现代码
- qq远程控制无法连接服务器,win10系统QQ远程协助,无法控制对方电脑,怎么办?...
- 计算机配置怎么造假,骗局揭秘:卖你一台假电脑 再送你一个假鲁大师
- Android 隐藏App的图标
- 第六次团队作业——Alpha冲刺之事后诸葛亮
- Web前端开发技术课程大作业——南京旅游景点介绍网页代码html+css+javascript
- direction和unicode-bidi
- 纳米数据足球数据,足球赛事比分,体育数据api,卡塔尔世界杯