1. 程式人生 > >linux系統下解決getch()輸入數值不回顯示

linux系統下解決getch()輸入數值不回顯示

continue pan not while image png bsp log main

在linux系統下開發C 程序卻會遇到系統不支持conio.h頭文件,無法使用getch()不回顯函數。下面就演示如何構建函數實現數值輸入不回顯。

  1 #include <stdio.h>  
  2 
  3 #include <termios.h>  
  4 
  5 #include <unistd.h>  
  6 
  7 #include <errno.h>  
  8 
  9 #define ECHOFLAGS (ECHO | ECHOE | ECHOK | ECHONL)  
 10 
 11
//函數set_disp_mode用於控制是否開啟輸入回顯功能 12 13 //如果option為0,則關閉回顯,為1則打開回顯 14 15 int set_disp_mode(int fd,int option) 16 17 { 18 19 int err; 20 21 struct termios term; 22 23 if(tcgetattr(fd,&term)==-1){ 24 25 perror("Cannot get the attribution of the terminal
"); 26 27 return 1; 28 29 } 30 31 if(option) 32 33 term.c_lflag|=ECHOFLAGS; 34 35 else 36 37 term.c_lflag &=~ECHOFLAGS; 38 39 err=tcsetattr(fd,TCSAFLUSH,&term); 40 41 if(err==-1 && err==EINTR){
42 43 perror("Cannot set the attribution of the terminal"); 44 45 return 1; 46 47 } 48 49 return 0; 50 51 } 52 53 //函數getpasswd用於獲得用戶輸入的密碼,並將其存儲在指定的字符數組中 54 55 int getpasswd(char* passwd, int size) 56 57 { 58 59 int c; 60 61 int n = 0; 62 63 64 65 printf("Please Input password:"); 66 67 68 69 do{ 70 71 c=getchar(); 72 73 if (c != \n|c!=\r){ 74 75 passwd[n++] = c; 76 77 } 78 79 }while(c != \n && c !=\r && n < (size - 1)); 80 81 passwd[n] = \0; 82 83 return n; 84 85 } 86 87 int main() 88 89 { 90 91 char *p,passwd[20],name[20]; 92 93 printf("Please Input name:"); 94 95 scanf("%s",name); 96 97 getchar();//將回車符屏蔽掉 98 99 //首先關閉輸出回顯,這樣輸入密碼時就不會顯示輸入的字符信息 100 101 set_disp_mode(STDIN_FILENO,0); 102 103 //調用getpasswd函數獲得用戶輸入的密碼 104 105 getpasswd(passwd, sizeof(passwd)); 106 107 p=passwd; 108 109 while(*p!=\n) 110 111 p++; 112 113 *p=\0; 114 115 printf("\nYour name is: %s",name); 116 117 printf("\nYour passwd is: %s\n", passwd); 118 119 printf("Press any key continue ...\n"); 120 121 set_disp_mode(STDIN_FILENO,1); 122 123 getchar(); 124 125 return 0; 126 127 } 128 129 130 131 132 133

運行結果:

技術分享

說明:Linux下C編程遇到要輸入密碼的問題,可輸入的時候密碼總不能讓人看見吧,本來想用getch()來解決輸入密碼無回顯的問題的,不料Linux-C中不支持getch(),我也沒有找到功能類似的函數代替,上面這個例子達到了預期的效果。

linux系統下解決getch()輸入數值不回顯示