最近一直在写课程设计,在windows下可以很方便的实现密文密码的显示输入,但在linux环境下没有getch函数所以必须自己实现一个getch函数,解决了这个问题,接着就是密码的退格问题,每次按一个键就会输出一个'*',但是Backspace键也不列外,所以要将按键对应的acsii找出来,当按到对应键的时候进行退格显示,下面是我的输入密码函数:
#include #include #include #include #include int getch1(void)//自己实现的getch函数 { struct termios tm,tm_old; int fd = STDIN_FILENO, c,d; if(tcgetattr(fd, &tm) < 0) { return -1; } tm_old = tm; cfmakeraw(&tm); if(tcsetattr(fd, TCSANOW, &tm) < 0) { return -1; } c = fgetc(stdin); if(tcsetattr(fd, TCSANOW, &tm_old) < 0) { return -1; } return c; } int inputkey(char k[])//密文密码输入函数,所传参数是要保存的字符串地址 { int i; for(i = 0; i < 10; i++) { __fpurge(stdin); k[i] = getch1(); if((k[i] == 127) && (i == 0))//当遇到backspace并且已经退格到最前面时不再退格 { i--; continue ; } if(k[i] == 13) { k[i]=0; break ; } else if((k[i] == 127) && (i > 0))//按下backspace键时,后退显示输出 { printf("\b \b"); i-=2; } else if(k[i] == 3) { printf("\n"); exit(0); } else { printf("*"); } } }