c语言,输入密码带星号的设计,帮忙解释一下代码的意思。谢谢

system("cls");printf("请输入加密密码:\n");for(i=0;i<20;){pass[i]=(char)getch();if(pass[i]==8... system("cls");
printf("请输入加密密码:\n");
for(i=0;i<20;)
{
pass[i]=(char)getch();
if(pass[i]==8)
{
printf("\b \b");
i--;
pass[i]='\0';
continue;
}
if(pass[i]==13)
{
pass[i]='\0';
break;
}
else
printf("*");
i++;
展开
 我来答
金色潜鸟
2013-04-05 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:5695万
展开全部
system("cls"); -- 清屏幕
printf("请输入加密密码:\n"); -- 提示输入

for(i=0;i<20;){ //循环语句开始,密码不超过20个字符
pass[i]=(char)getch(); // 不需要等待,即时取得1个输入键,作为字符存入pass[i]
if(pass[i]==8){ }; // 如果即时取得的是 Backspace 键,如何处理
if(pass[i]==13){ } else printf("*"); // 如果即时取得的是 Enter 键(键值13), 密码输入结束,pass[i] 赋字符串结束符 '\0', 并结束循环(break)。 否则 打印1个 * 号;
i++; // i 增1,为取下1个字符做准备。
} // 循环语句结束

-------------------
下面详细地看,Backspace 键,如何处理
if(pass[i]==8)
{
printf("\b \b"); // 输出 "\b \b" ,回退1格,输出1个空白,也就是抹去屏幕上一个字符,再让光标回退到空白左面
i--; // Backspace 键是功能键,不作为密码字符,所以 i 减去 1
pass[i]='\0'; // 赋字符串结束符
continue; // 跳到下一次循环。
}
-----
程序写完整了是:
main()
{
int i;
char pass[30];
system("cls");
printf(" input pass\n");
for(i=0;i<20;){
pass[i]=(char)getch();
if(pass[i]==8){ printf("\b \b");i--; pass[i]='\0'; continue; };
if(pass[i]==13){ pass[i]='\0'; break;}
else printf("*");i++;
}
printf("%s",pass);
}
程序缺点是,如果一开始就敲入几个 Backspace 键,密码前几个字符就会丢失。
戈壁与清潭
2013-04-04 · TA获得超过735个赞
知道小有建树答主
回答量:571
采纳率:57%
帮助的人:125万
展开全部
同学,你这个有点错误吧?
我先讲一下C语言的ASCII码
‘\b’=8 对应的是 退格键
‘\r’=13 对应的是 回车键
'\b' 为转义字符,代表光标向前移动一位,同时删除当前位数字
'\0'=0 为字符串结束符号
所以
第一个if语句意思是 若是输入的是 退格键,则将已输入的最后一个字符覆盖掉
并且将显示的字符删去(输入的退格键也是一个字符的)
不过这里面要判断一下。退格键前有没有输入数据,否则第一次输入就输入退格键,会造成数组越界异常
第二个if 语句的意思就更好说了,若输入的是回车键,说明密码数据已输入确认
要将最后一个字符 也就是回车键设置为结束符'\0'
如果以上输入的都不是
则 认为是正常密码
这里需注意一点,else 后面可能要这么输出
printf(“\b*”);//现将数的字符去掉,然后将*显示出来
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
老样子AAAA
2013-04-04
知道答主
回答量:24
采纳率:0%
帮助的人:3.5万
展开全部
getch()这个函数是每次接受输入一个字符
用下面这个代码吧,比较好理解,改注释的都有了,自己琢磨吧
string Control::GetPwd()
{
char password[100];
int index=0;
while(1)
{
char ch;
ch=getch();
if(ch==8) //退格键
{
if(index!=0)
{
cout<<char(8)<<" "<<char(8);
index--;
}
}
else if(ch=='\r') //回车键
{
password[index]='\0';
cout<<endl;
break;
}
//其它输入
else
{
cout<<"*";
password[index++]=ch;
}
}
//返回密码
return password;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
0就是你
2013-04-04 · 超过14用户采纳过TA的回答
知道答主
回答量:55
采纳率:0%
帮助的人:36.2万
展开全部
不是很懂你的意思,你要输入什么密码?达到什么目的?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kechangyixiao
2013-04-05
知道答主
回答量:38
采纳率:0%
帮助的人:17.5万
展开全部
戈壁与清潭回答正解,怎么还不给他分呢?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式