先前在CSDN上逛,看到一个帖子问怎样在c下实现输入密码,然后存取并显示*号。于是自己也试着写了一个小程序,输入一段信息,不显示,然后提示输入密码,显示*,然后要查看先前输入的信息,提示输入密码,同样回显*号,如果密码正确,那么显示先前输入的信息,不正确提示密码错误,退出程序。
虽然程序思路简单,但需要有一点要注意的是,后面判断密码是否正确的时候用到了字符串比较函数strcmp,这里存放密码用的是一个一维数组,如果在定义的时候忘了初始化的话,即使你两次输入的密码都正确,如果密码没有把数组填满的话,那么剩余的数组元素都是随机数,比较结果将是不同的!所以先把数组都用相同的元素初始化这一点很重要。
源代码如下:
#include <stdio.h>
#include <conio.h>
#include <string.h>
main()
{
char c;
char pass[100] = {0}; //存放密码数组
char M[100] = {0}; //存放的信息
char RevPass[100] = {0}; //把所有数组初始化
int i,n,m,r;
i = n = m = r =0;
printf("please input the message:/n");
while((c=getch())!=13){ //回车截止
M[i++] = c;
m++; //记录message的长度
}
printf("/nPlease input the password:/n");
i = 0;
while ((c=getch())!=13){ //回车截止
printf ("*");
pass[i++]=c;
n++; //记录密码长度
}
printf("/nif you want to see the message,please input the password:/n");
i = 0;
while ((c=getch())!=13){
printf ("*");
RevPass[i++] = c; //记录输入的密码
r++; //记录输入的密码的长度
}
if(r!=n){ //如果长度不一样,不进行比较了,直接提示密码错误
printf("/nwrong passwords!/n");
printf("r=%d n=%d",r,n);
}
else if(!strcmp(pass,RevPass)){
printf("/nthe message is :/n");
for(i=0;i<m;i++){
printf("%c",M[i]);
}
}
else
printf("/nwrong passwords!/n");
printf("/nThe password you just input are:/n");
for(i=0;i<n;i++){
printf("%c ",pass[i]);
}
printf("/n");
}