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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章