curses--图形函数库

本文介绍如何在C语言中实现密码输入时的星号显示而非明文,通过使用curses库中的noecho()函数来关闭回显功能,实现安全且友好的用户交互体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前几天遇到一个问题要求从键盘输入密码,使用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连接选项, 像这样:

gcc -o hello hello.c -lcurses

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值