C语言输入密码时的回显处理
来源:互联网 发布:软件测试薪资 编辑:程序博客网 时间:2024/06/14 07:43
C语言输入密码时的回显处理
之前在写一个C语言的项目的时候,需要一个登陆界面。然而直接输入密码的时候会有回显,于是就百度到了getch(),正好现在在看C语言进阶,再整理一下:
- getch()
- getche()
- sprintf()
- 输入密码无回显
- 输入密码回显‘*’
函数功能比较
1、getchar()是从键盘的文件缓冲区读取字符,当从键盘输入字符时,可以输入若干个字符(但是它只读取一个),并且最后一定要回车确认。而getch()和getche()是直接从简繁读取(不经过文件缓冲区),输入时只要按下一个键(任意键,也可以是回车键),不需要回车确认,程序就能继续运行了。
2、用getchar()读取字符时,若键盘输入回车,则读取的字符时换行符’\n’(送入缓冲区时被转换,回车总是被转换为换行符再送入缓冲区);而用getch()或getche()读取字符时,若键盘输入回车,则读取的字符是回车符’\r’(不经过缓冲区所以未被转换,不同系统有区别)。
3、getch()和getche()也有不同:前者对输入没有回显,既屏幕上不出现输入的字符,可以用来输入密码;而后者有回显。
getch()
1、头文件:conio.h(不是C标准库中的文件,是Console Input/Output(控制台输入输出)的简写,其中定义了通过控制台进行数据输入和数据输出的函数,主要是一些用户通过按键盘产生的对应操作)
2、函数原型:int getch(void)
3、返回值:读取的字符
4、易错点:
(1)并非标准函数,要注意移植性
(2)所在头文件是conio.h,而不是stdio.h
(3)在使用之前要调用initscr(),结束时要调用endwin()。否则会出现不输入字符这个函数
也会返回的情况。
(4)在不同平台,输入回车,getch()将返回不同数值,而getchar()统一返回10(即\n)
1)windows平台下ENTER键会产生两个转义字符 \r\n,因此getch返回13(\r)。
2)unix、 linux系统中ENTER键只产生 \n ,因此getch返回10(\n)。
3)MAC OS中ENTER键将产生 \r ,因此getch返回13(\r)。
getch()
输入后立即从控制台取字符
1、头文件:conio.h
2、函数原型:int getche(void)
3、返回值:输入字符对应的ASCII码
sprintf()
字符串格式化命令,主要功能是把格式化的数据写入某个字符串中
1、头文件:stdio.h
2、函数原型:int sprintf( char *buffer, const char *format, [ argument] … );
buffer:char型指针,指向将要写入的字符串的缓冲区。
format:格式化字符串。
[argument]…:可选参数,可以是任何类型的数据**
3、返回值:返回写入buffer 的字符数,出错则返回-1. 如果 buffer 或 format 是空指针,且不出错而继续,函数将返回-1,并且 errno 会被设置为 EINVAL。
同时buffer的内容将被改变。
sprintf_s和snprintf
sprintf_s()是sprintf()的安全版本,通过指定缓冲区长度来避免sprintf()存在的溢出风险
int sprintf_s(char *buffer,size_t sizeOfBuffer,const char *format [,argument] … );
不过sprintf_s()是微软私有的函数,考虑到跨平台移植,最好使用snprintf()
int _snprintf(char *buffer, size_t count, const char *format [,argument] … );
strftime
专门用于格式化时间字符串
要调用者指定缓冲区的最大长度
例:strftime(s, sizeof(s), “%Y-%m-%d %H:%M:%S”, localtime(&t));
输入密码无回显
#include <stdio.h>#include <conio.h>int main(void){ int i = 0; char password[25],ch; printf("Please input password:"); while(1){ ch = getch(); if(ch == '\r') break; password[i++] = ch; } password[i] = 0; printf("\nYour password is:%s\n",password); return 0;}
输入密码回显‘*’
#include <stdio.h>#include <conio.h>void in_password(char*,int,int);int main(void){ int min_len = 6, max_len = 16; char password[25],ch; printf("Please input password:"); in_password(password, min_len, max_len); printf("\nYour password is:%s\n", password); return 0;}void in_password(char *password,int min,int max){ int i; char ch; while(1){ i = 0; while(1){ ch = getch(); if(ch == '\r') break; else if(ch == '\b'){ if(i > 0){ printf("\b \b"); i--; } continue; } printf("*"); if(i > max) break; password[i++] = ch; } password[i] = 0; if(i < min || i > max) printf("\nPlease input again:"); else break; }}
- C语言输入密码时的回显处理
- C语言输入密码回显*号
- c语言输入密码回显程序
- 输入密码回显星号 -- C语言
- C语言实现的密码输入功能
- C语言实现的密码输入功能
- C语言编程中实现输入密码回显星号
- C语言编程中实现输入密码回显星号
- [心得]C语言中实现密码输入 回显星号*
- C语言编程中实现输入密码回显星号
- C语言编程中实现输入密码回显星号
- c语言输入密码时,用*代码密码
- C语言实现输入密码
- C语言实现密码输入
- 用C语言输入密码
- C语言实现输入的密码与设置密码进行比对,输入密码可以任意输入。
- C语言控制台下实现模拟密码的输入
- C语言中处理密码
- CSS 学习笔记——入门
- 如何使用CMD命令行启动系统某项服务
- Android学习(三)android的八种对话框
- MAVEN实现多环境搭建
- hiho一下 第161周 树结构判定
- C语言输入密码时的回显处理
- 8.15 M
- JS12
- C#中mvc模式在线预览Office(word 可编辑、txt)文件
- iptables-1.6.0的ARM移植
- 是否有网络
- IntelliJ打开浏览器的快捷键
- 深度学习论文(八)---DeepLabV1-SEMANTIC IMAGE SEGMENTATION WITH DEEP CONVOLUTIONAL NETS AND FULLY CONNECTED C
- 对区间的模糊排序(原题算法导论第三版思考题7-6)