带星号的密码输入

在软件开发中,往往会遇到要求用户输入密码的情况。出于对密码的保密,输入的字符是不会显示到屏幕上的。例如,在登录Linux系统时,输入用户名后,输入的密码是不显示的。可用getch()这个函数,但是在linux文件下,此函数所在的头文件为curses.h。

curses库是由柏克莱大学的Bill Joy及Ken Arnold所开发的。当时开发curses库的目的是为了解决程序对于不同终端的兼容性。curses库用于处理Linux/UNIX上的光标移动及屏幕显示问题。考虑到curses库的复杂性,这里只是简单地介绍一下curses库的使用。

使用curses库中的函数前,需要进行必要的初始化工作。程序需要使用initscr函数来开启curses模式,在结束前调用endwin函数来关闭curses模式。代码如下:

#include <curses.h>

int main(int argc,char* argv[]){

    initscr();

    endwin();

}

在实际使用中,出于方便的目的,往往把一些初始化的动作放置在初始化函数中,以方便调用。具体代码如下:

void initial()

{

    initscr();

    cbreak();

    nl();

    noecho();

    intrflush(stdscr,FALSE);

    keypad(stdscr,TRUE);

    refresh();

}

#include<stdio.h>
#include<curses.h>
#include<unistd.h>
#include<stdlib.h>

void init()
{
    initscr(); 
    cbreak(); //调用cbreak之后,除了“Del”和“Ctrl”键之外,接受其他字符的输入
    nl();//输出时,换行是否作为回车字符
    noecho();//是否立即显示
    intrflush(stdscr,FALSE);//若为TRUE,可以加快中断
    keypad(stdscr,TRUE);//允许使用键盘上的特殊字符
    refresh();//重新绘制屏幕内容,在调用initsr函数后,第一次调用refresh函数会清除题目显示
}

int getpasswd(char *passwd,int size)
{
    int c;
    int n = 0;
   
    printw("please input password:");

    while((c != '\n')&& (n < (size-1)))
    {
        c = getch();
	if(c != '\b')
	{
	    printw("*");
	}
	/*if( c == '\b')
	{
	    printw("a\n");
	    passwd[n--] = '\0';
	}
*/
    }
    passwd[n] = '\0';
    return n;
}

int main()
{
    char passwd[20];
    int n;

    init();
    
    n = getpasswd(passwd,sizeof(passwd));

    printw("\nyour password is %s\n",passwd);
    
    refresh();
    endwin();
    return 0;
}

但是这段程序是有问题的,只能输入然后看到的是星号,但是按了后退键并没有什么反应,还有不能把输入的函数的原型输出来。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值