下列是显示ascii码的十进制的函数(回车,回退都可以检测)
int main()
{
struct termios old,new;
tcgetattr(0,&old);
new = old;
new.c_lflag &= ~(ICANON);//输入一个字符立马被接收
tcsetattr(0,TCSANOW,&new);
char ch;
printf("|%d|\n",ch);
scanf("%c",&ch);
printf("|%d|\n",ch);
//input_pwd();
return 0;
}
下面是密码不回显参考代码
#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include <termios.h>
/* Standard C header */
#include <stdio.h> /* for getchar(), printf() */
/* POSIX headers */
#include <termios.h> /* for tcxxxattr, ECHO, etc */
#include <unistd.h> /* for STDIN_FILENO */
void input_pwd()
{
struct termios old,new;
tcgetattr(0,&old);
new = old;
new.c_lflag &= ~(ECHO | ICANON);
char passwd_stdin[20] = {0};
char ch;
int i = 0;
int tmp;
while(1)
{
tcsetattr(0,TCSANOW,&new);//设置密码不回显
scanf("%c",&ch);
tcsetattr(0,TCSANOW,&old);
if(ch == 127)//'\b'显示是127
{
if(i>0)
{
passwd_stdin[i] = '\0';
i--;
printf("\r");
for(tmp = 0;tmp<20;tmp++)
{
printf(" ");
}
printf("\r");
for(tmp = 0;tmp<i;tmp++)
{
printf("*");
}
}
continue;
}
if(ch == '\n')//结束判断
{
passwd_stdin[i] = '\0';
break;
}
if(i==20)//结束判断
{
passwd_stdin[i] = '\0';
continue;
}
passwd_stdin[i] = ch;
i++;
printf("\r");
for(tmp = 0;tmp<i;tmp++)
{
printf("*");
}
}
printf("\n登录成功\n");
printf("密码:%s\n",passwd_stdin);
}
int main()
{
input_pwd();
return 0;
}