linux下退格键的小研究(续)
来源:互联网 发布:focusky破解补丁mac 编辑:程序博客网 时间:2024/06/05 18:39
上次出现的backspace在输入的时候显示^H的问题,请教了一下组里的老司机,老司机说,这是回显的问题,要把那个echo什么的修改一下,顺着这条思路,查了点资料,上面一篇博客就是其中之一。
废话少说,直接放码:
#include <stdio.h>#include <unistd.h>#include <termios.h>#define LEN 30struct termios oldt, newt;void mode_off(void);void mode_restore(void);void get_username(char * string, int len){char ch;int i=0;mode_off();puts("\nusername:\n");while((ch=getchar())=='\n');while(ch!='\n' && i<len-2 && i>=0 ){if(ch=='\b'){string[--i]='\0';putchar('\b');putchar(' ');putchar('\b');} else {string[i++]=ch; putchar(ch);} ch=getchar();}putchar('\n');string[i]='\0';mode_restore();}void get_password(char * string, int len){char ch;int i=0;mode_off();puts("\npassword:\n");while((ch=getchar())=='\n');while(ch!='\n' && i<len-2 && i>=0 ){if(ch=='\b'){string[--i]='\0';putchar('\b');putchar(' ');putchar('\b');} else {string[i++]=ch; putchar('*');} ch=getchar();}putchar('\n');string[i]='\0';mode_restore();}void mode_off(void) //off echo{newt=oldt;newt.c_lflag &= ~(ECHO | ICANON);tcsetattr(STDIN_FILENO, TCSANOW, &newt);}void mode_restore(void) //restore echo{tcsetattr(STDIN_FILENO, TCSANOW, &oldt);}
mode_off是关掉回显,mode_restore是恢复原来的模式,get_username是输入用户名,get_password是输入密码。关于结构体struct termios、tcgetattr()和tcsetattr()见上一篇文章,或者自己查资料。
关掉回显后,读一个显示一个,如果读到backspace,光标往回退一个,输个空格,覆盖原来的字符,再退一格,往前进一步。输密码的时候,则是输一个字符,显示一个*。
至此,backspace的问题基本解决。
阅读全文
0 0
- linux下退格键的小研究(续)
- linux下退格键的小研究
- SQLite的小研究
- 有关foreach的小研究
- 格式化输入的小研究
- Windows Hook的小研究
- JavaScript绝句的小研究
- JavaScript绝句的小研究
- JavaScript绝句的小研究
- JavaScript绝句的小研究
- json的一点小研究
- Linux MTD层的研究(Nandflash)
- linux下的退格键小研究(补充)
- [研究方法]查阅论文的小技巧
- 定性研究的小技巧与注意事项!
- 有关花指令的一点小研究
- 虚函数的一点小研究
- 关于Application.DoEvents()的小研究
- 复习Web前端开发(一)
- javaScript -鼠标拖拽
- hexo+github搭建博客
- 系统的平均并发用户数和并发数峰值如何估算
- 基于ThinkPHP的2个CMS后台GetShell利用
- linux下退格键的小研究(续)
- 鼠标移动事件
- Python 中的关键字with详解
- 鼠标事件
- 超好用的删除行tr js代码
- android studio 融云SDK集成
- 鼠标事件案例—戳眼
- 用户注册
- 干货来袭,java用户登录与注销(前台+后台 框架springboot)