Linux中完成输入密码显示*功能

鉴于Linux中getch函数无法使用,故LZ结合打印终端行设置命令stty命令完成此功能:

源码及注释如下:

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

#define  BACKSPACE  127 //\b的阿斯科码值,

/**
*完成的功能:输入密码显示*,能回删,未输入密码时,删除键停止工作,只能输入6位密码,按回车结束输入,输入的密*码保存在数组中
**/
int main()
{
    char c[7];
    int i;
    printf("please input the pwd:");
    system("stty -icanon");  //设置一次性读完操作,如使用getchar()读操作,不需要按Enter
    system("stty -echo");    //关闭命令的回显,即键入的任何字符均不在屏幕显示
    for(i = 0;i < 7;i ++)
    {
        c[i] = getchar();
        if((i == 0)&&(c[i] == BACKSPACE)) //未输入密码时按Backspace退格键
        {
            printf(" \b");  //向前打印一个空格,再向后退一位(即光标未移动)
            i--;  //先减一等到执行下一步,i回到0,从第一位开始保存判断
        }
        else if(c[i] == BACKSPACE) //已输入密码时按Backspace退格键
        {
            printf("\b \b");  //先退一格,光标前移;打印空格覆盖*,光标后移;再退一格,光标前移
            i = i - 2;
        }
        else if(i == 6&&c[i] != '\n') //已输入6位密码,想继续输入
        {
            printf(" \b");
            i--;
        }
        else if(i == 6) //已输入6位密码,按下回车
        {
            break;
        }
        else
        {
            printf("*");
        }
    }
    c[i] = '\0';
    printf("\nmima:%s\n",c);//检验密码是否已保存成功
    system("stty echo");    // 打开回显
    return 0;
}

你可能感兴趣的:(源码,linux,命令,C语言,密码)