前几天遇到一个问题要求从键盘输入密码,使用scanf函数,但是密码不显示出来,取而代之的是输出*;
百度的时候终于知道这个问题的主要就是要关闭回显,一般我们从键盘用scanf输入数据时,终端会把这个数据显示在频幕上,很明显当我们要输入密码时,这种功能是有必要去除的,所以就要关闭回显,只要输出一个*就好了。
而关闭回显就要使用curses这个图形函数库。(Linux和unix系统下)
首先我们需要在头文件中调用这个函数库
#include <curses.h>
这个函数库中有几个常用的函数如下:
cbreak():调用cbreak函数后,除了“Del”和“Ctrl”键外,接受其他所有字符输入。
nl()/nonl():输出时,换行是否作为回车字符。nl函数将换行作为回车符,而nonl函数相反。
noecho()/echo():关闭/打开输入回显功能。
intrflush(WINDOW *win, bool bf):win为标准输出。当bf为true时输入Break,可以加快中断的响应。但是,有可能会造成屏幕输出信息的混乱。
keypad(WINDOW *win, bool bf):win为标准输出。调用keypad函数后,将可以使用键盘上的一些特殊字符,如方向键,转化成curses.h中的特殊键。
refresh():重绘屏幕显示内容。在调用initscr函数后,第一次调用refresh函数会清除屏幕显示。
而对于输入密码的问题:
我们可以用noecho()/echo()来开关回显。
不止这些功能,还可以利用curses函数库来进行输出界面设计等等。
需要注意的是:
1.在终端使用的屏幕模式是基于文本的. 所以在开始使用curses前, 需要用initscr()函数初始化屏幕. 对应的, 程序结束需要调用endwin();函数来关闭curses状态.
2.因为curses库不在标准路径上, 所以我们要加上 -lcurses连接选项, 像这样: