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

  • 相关阅读:
    深入理解HTTP Session
    java中使用队列:java.util.Queue
    throws/throw Exception 异常应用
    Log4j实现对Java日志的配置全攻略
    java中volatile关键字的含义
    hibernate调用oracle存储过程||函数
    手势仿QQ侧滑---秀清
    归档和解档---秀清
    全局定义UINavigationContoller--By秀清
    重力感应 加速计- By严焕培
  • 原文地址:https://www.cnblogs.com/ccmfc/p/1918363.html
Copyright © 2020-2023  润新知