C语言 如何不回显密码

Python010

C语言 如何不回显密码,第1张

#include <unistd.h>

#include<stdio.h>

#include <termios.h>

char Getch()

{

char ch

struct termios oldt, newt

tcgetattr(STDIN_FILENO, &oldt)

newt = oldt

newt.c_lflag &= ~(ECHO|ICANON)

tcsetattr(STDIN_FILENO, TCSANOW, &newt)

ch = getchar()

tcsetattr(STDIN_FILENO, TCSANOW, &oldt)

return ch

}

void getpasswd(char *p)

{

int i=0

printf("password:")

while((*(p+i)=Getch())!='\n')

{

putchar('*')

i++

}

*(p+i) = '\0'

}

int main()

{

char a[10]

getpasswd(a)

printf("%s",a)

}

#include<conio.h> //这个头文件不是标准库函数的,一般编译器是有的,但是unix和linux编译器是没有的

#define PASSWORD "123456"

int password()

{

char

p[20],i=0

system("cls")

printf("请输入密码 =>")

while(p[i]=getch())

{

if(p[i]==13)

break

if(p[i]!='\b')

{

printf("*")

i++

}

else

{

printf("\b

\b")

i--

}

}

p[i]='\0'

if(strcmp(p,PASSWORD)==0)

{

printf("验证通过")

press()

return 1

}

else

{

printf("密码错误")

press()

return 0

}

}

有办法,但有个地方你要改,就是这里:gets(Password)

你记得C语言里本来有三个字符输入函数

getch(), getche(), getchar()

三个函数各有不同,其中getchar()会显示,要回车, getch()不显示,不回车

getche()这个。。。恕我直言,忘了。。。不过我们用不到它

用到的就是getch()这个函数的特性,只管输入,它不会显示在屏幕上你输入的内容。那它不会显示,我们~~给它加一个显示的好咯,printf("*");

但别忘了,getch()是字符输入,不是字符串,估计得用循环咯

程序首部加上char ch

然后你的gets(Password)删掉换成下边的:

while(1)

{

if((ch = getch()) == 27)

{

break

}

printf("*")

//注意下面的内容,想办法把ch这个字符填加到Password这个字符串里

//方法嘛,我想你可以想出来的吧,这里我不写了,有问题HI我吧

}

注意上边是个死循环,唯一的出口就是那个break,27是ESC键的ASCII码,这里我就设置了如果输出中按了ESC键,则跳出循环,停止输入,你可以换成回车或其它键的ASCII码,自由定。