歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux技術

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

Copyright © Linux教程網 All Rights Reserved