在C语言中,如何做到在用户输入密码时不显示密码本身,只回显星号。或者什么都不显示?
我们调用一个函数getch(),它包含在头文件中。该函数可以在输入的同时不显示输入内容,并在输入完成后不需回车而自动终止输入。与此同时,该头文件中还包含另外一个函数getche(),它和getch()功能相同,唯一的区别是输入的同时显示输入的内容。本文我们只用到getch();
推荐算法:
#include<stdio.h>
#include<conio.h>
void main()
{
char str[6]={NULL};
int i;
我们调用一个函数getch(),它包含在头文件中。该函数可以在输入的同时不显示输入内容,并在输入完成后不需回车而自动终止输入。与此同时,该头文件中还包含另外一个函数getche(),它和getch()功能相同,唯一的区别是输入的同时显示输入的内容。本文我们只用到getch();
推荐算法:
#include<stdio.h>
#include<conio.h>
void main()
{
char str[6]={NULL};
int i;
printf("请输入5位密码:\n");
for(i=0;i<5;i++)
{
str[i]=getch();
printf("*");
}
str[i]='\0';
printf("\n您输入的是: %s\n",str);
}
{
str[i]=getch();
printf("*");
}
str[i]='\0';
printf("\n您输入的是: %s\n",str);
}
[cpp] view plain copy
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<ctype.h>
int main()
{
int n,p;
char ch,acnt[256],pwd[256];
scanf("%d",&n);
while(n--)
{
system("cls");//清屏
p=0;
puts("请输入账号:");
scanf("%s%*c",acnt);
puts("请输入密码:");
while((ch=getch())!='\r')//判断是否是回车
{
if(ch==8)//实现backspace键的功能,其中backspace键的ascii码是8
{
putchar('\b');
putchar(' ');
putchar('\b');
if(p>0)//最多只能删到没有字符
p--;
}
if(!isdigit(ch)&&!isalpha(ch))//判断是否是数字或字符
continue;
putchar('*');//在屏幕上打印星号
pwd[p++]=ch;//保存密码
}
pwd[p]=0;//结束字符串
printf("\n账号:\n%s\n密码:\n%s\n",acnt,pwd);
p=0;
system("pause");
}
return 0;
}
一、输入密码回显星号
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#define MAX_PASSWD_LEN 16
char passwd[MAX_PASSWD_LEN + 1] = "";
char *GetPasswd()
{
unsigned char c;
int i = 0;
while ((c=getch())!='\r')
{
if (i<MAX_PASSWD_LEN && isprint(c))
{
passwd[i++] = c;
putchar('*');
}
else if (i>0 && c=='\b')
{
--i;
putchar('\b');
putchar(' ');
putchar('\b');
}
}
putchar('\n');
passwd[i] = '\0';
return passwd;
}
{
unsigned char c;
int i = 0;
while ((c=getch())!='\r')
{
if (i<MAX_PASSWD_LEN && isprint(c))
{
passwd[i++] = c;
putchar('*');
}
else if (i>0 && c=='\b')
{
--i;
putchar('\b');
putchar(' ');
putchar('\b');
}
}
putchar('\n');
passwd[i] = '\0';
return passwd;
}
二、输入密码不回显
与回显星号的代码基本相同,只是去掉打印输出的代码。
#include <conio.h>
#include <ctype.h>
与回显星号的代码基本相同,只是去掉打印输出的代码。
#include <conio.h>
#include <ctype.h>
#define MAX_PASSWD_LEN 16
char passwd[MAX_PASSWD_LEN + 1] = "";
char *GetPasswd()
{
unsigned char c;
int i = 0;
while ((c=getch())!='\r')
{
if (i<MAX_PASSWD_LEN && isprint(c))
{
passwd[i++] = c;
}
else if (i>0 && c=='\b')
{
--i;
}
}
passwd[i] = '\0';
return passwd;
}
{
unsigned char c;
int i = 0;
while ((c=getch())!='\r')
{
if (i<MAX_PASSWD_LEN && isprint(c))
{
passwd[i++] = c;
}
else if (i>0 && c=='\b')
{
--i;
}
}
passwd[i] = '\0';
return passwd;
}