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