用C语言 实现输入密码回显*号

//linux与windows下都行,支持用户输入BACKSPACE时可以删除之前输入的,输入ENTER时,打印出密码

#include <stdio.h>
#include <string.h>
#include <assert.h>

#if _WIN32  //编译开关
#include <conio.h>

#define BACKSPACE 8
#define ENTER 13
#endif

#if unix  //编译开关
#include <termios.h>
#include <unistd.h>

#define BACKSPACE 127
#define ENTER 10
#endif

#define MAX_SIZE 20

#if unix
int getch()
{
 int ch=0;
 struct termios old_termios, new_termios;

 assert(0==tcgetattr(STDIN_FILENO, &old_termios));   //获取终端的相关参数
 memcpy(&new_termios, &old_termios, sizeof(new_termios));

 new_termios.c_lflag &= ~(ECHO | ICANON);     //ECHO 显示输入字符 ICANON 使用标准输入模式

 assert(0==tcsetattr(STDIN_FILENO, TCSANOW, &new_termios)); //设置终端参数
 ch=getchar();

 return ch;
}
#endif

void inputdata(char* psrc)
{
 int i=0;
 
 while(i<MAX_SIZE && ((psrc[i]=getch())!=ENTER))
 {
  if(psrc[i]==BACKSPACE)
  {
   psrc[i]='\0';
   psrc[--i]='\0';
   putchar('\b');
   putchar(' ');
   putchar('\b');
   i--;
  }
  else
   putchar('*');
  i++;
 }
 psrc[i]='\0';
}

int main(int argc, char* argv[])
{
 char password[MAX_SIZE];
 
 inputdata(password);
 putchar('\n');
 puts(password);
 
 return 0;
}

原文地址:https://www.cnblogs.com/ccmfc/p/1918363.html