设为首页 加入收藏

TOP

Linux下解决getch()输入数值不回显示
2017-11-13 14:55:12 】 浏览:181
Tags:Linux 解决 getch 输入 数值 显示

在Linux系统下开发C 程序却会遇到系统不支持conio.h头文件,无法使用getch()不回显函数。下面就演示如何构建函数实现数值输入不回显。


#include <stdio.h> 


#include <termios.h> 


#include <unistd.h> 


#include <errno.h> 


#define ECHOFLAGS (ECHO | ECHOE | ECHOK | ECHONL) 


//函数set_disp_mode用于控制是否开启输入回显功能 


//如果option为0,则关闭回显,为1则打开回显 


int set_disp_mode(int fd,int option) 



  int err; 


  struct termios term; 


  if(tcgetattr(fd,&term)==-1){ 


    perror("Cannot get the attribution of the terminal"); 


    return 1; 


  } 


  if(option) 


        term.c_lflag|=ECHOFLAGS; 


  else 


        term.c_lflag &=~ECHOFLAGS; 


  err=tcsetattr(fd,TCSAFLUSH,&term); 


  if(err==-1 && err==EINTR){ 


        perror("Cannot set the attribution of the terminal"); 


        return 1; 


  } 


  return 0; 



//函数getpasswd用于获得用户输入的密码,并将其存储在指定的字符数组中 


int getpasswd(char* passwd, int size) 



  int c; 


  int n = 0; 


   


  printf("Please Input password:"); 


   


  do{ 


      c=getchar(); 


      if (c != '\n'|c!='\r'){ 


        passwd[n++] = c; 


      } 


  }while(c != '\n' && c !='\r' && n < (size - 1)); 


  passwd[n] = '\0'; 


  return n; 



int main() 



  char *p,passwd[20],name[20]; 


  printf("Please Input name:"); 


  scanf("%s",name); 


  getchar();//将回车符屏蔽掉 


  //首先关闭输出回显,这样输入密码时就不会显示输入的字符信息 


  set_disp_mode(STDIN_FILENO,0); 


  //调用getpasswd函数获得用户输入的密码 


  getpasswd(passwd, sizeof(passwd));   


  p=passwd; 


  while(*p!='\n') 


    p++; 


  *p='\0'; 


  printf("\nYour name is: %s",name); 


  printf("\nYour passwd is: %s\n", passwd); 


  printf("Press any key continue ...\n"); 


  set_disp_mode(STDIN_FILENO,1); 


  getchar(); 


  return 0; 


}


运行结果:



说明:Linux下C编程遇到要输入密码的问题,可输入的时候密码总不能让人看见吧,本来想用getch()来解决输入密码无回显的问题的,不料Linux-C中不支持getch(),我也没有找到功能类似的函数代替,上面这个例子达到了预期的效果。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇图论基本知识 下一篇Linux环境 C 程序实现密码隐秘输入

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目