C/C++: 控制台输入密码, 用*号掩藏

C/C++: 控制台输入密码, 用*号掩藏
#include  < iostream >
#include 
< conio.h >

/**
 * 秘密在于conio.h中的getch()从键盘中读取字符时,并不会在屏幕上输出已经输入的字符,
 * 而用一个putch('*')来哄骗,代表已经输入一个字符
 * 怪不得这个头文件要叫conio.h, con的意思就有哄骗,看来就是由此而来.
 
*/

using namespace std;

int  main() {
        
char *  password;
        
char *  passwordConfirm;

        
int  length  =   4 ;
        password 
=   new   char [length  +   1 ];
        passwordConfirm 
=   new   char [length  +   1 ];

        
char *  p  =  NULL;
        
int  count  =   0 ;

        cout 
<<   " Input password :  " ;
        p 
=  password;
        count 
=   0 ;
        
// fflush(stdin);
         while  ((( * =  getch())  !=   13 &&  count  <  length) {
                
//  这里不是'\n'(10), new line
                
//  而是'\r'(13), reback. 即是按下回车键,好像这个东西是linux的.
                
//  主要是与getch这个函数有关.
                putch( ' * ' );
                fflush(stdin);

                p
++ ;
                count
++ ;
        }
        password[count] 
=   ' \0 ' ;

        cout 
<<  endl  <<   " Confirm the password :  " ;
        p 
=  passwordConfirm;
        count 
=   0 ;
        
// fflush(stdin);
         while  ((( * =  getch())  !=   13 &&  count  <  length) {
                putch(
' * ' );
                fflush(stdin);

                p
++ ;
                count
++ ;
        }
        passwordConfirm[count] 
=   ' \0 ' ;

        cout 
<<  endl;
        
if  (strcmp(password, passwordConfirm)  ==   0 ) {
                cout 
<<   " The password is right. "   <<  endl;
                cout 
<<  password  <<  endl;
        } 
else  {
                cout 
<<   " Confirm password fail. "   <<  endl;
                cout 
<<  password  <<  endl  <<  passwordConfirm  <<  endl;
        }

        
return   0 ;
}










你可能感兴趣的:(C/C++: 控制台输入密码, 用*号掩藏)