| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1229 人关注过本帖
标题:[求助]解释下这个程序
只看楼主 加入收藏
jackys2006
Rank: 1
等 级:新手上路
帖 子:195
专家分:0
注 册:2006-3-10
收藏
 问题点数:0 回复次数:19 
[求助]解释下这个程序
以下是某高手写的密码验证程序,我把它摘了出来,并弄成一个单独的程序.程序的作用: 要求输入密码,如果密码正确,则通过;如果密码不对,则显示<密 码 错 误 !>再要求重新输入.我不明白的就是用红色标出来的那部分,它是怎么样造成那个将输入的字符变成 * 号的效果的,还有,ASCII码的13号控制字符的作用又是什么?
望高手不吝赐教!谢谢!
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <time.h>
#define PASSWORD "hello"
int main(void)
{
char *pass=NULL; //初始化指针
int count;
pass=(char *)malloc(255*sizeof(char)); //分配内存
while(1)
{
count=0;
printf("\n\n\n\n\n\t\t\t学 生 成 绩 管 理 系 统 \n");
printf("\n\t\t UserName:ChenYiWan \n");
printf("\n\t\t PassWord:");
while((count>=0)&&(pass[count++]=getch())!=13) //密码输入
{
if(pass[0]=='\b')
{
count=0;
continue;
}
else if(pass[count-1]=='\b')
{
printf("%c%c%c",'\b','\0','\b');
count-=2;
}
else
putchar('*');
}
pass[--count]='\0';
if(!strcmp(pass,PASSWORD)) //开始验证
{
system("cls");
printf("\n\n\n\n\n\n\n\n\n\t\t\t");
printf("Pass!\n\n\t\t\t");
system("Pause");
free(pass);
exit(0);
}
free(pass);
pass=(char *)malloc(255*sizeof(char));
system("cls");
printf("\a\n\n\n\n\n\n\n\n\t\t\t\t密 码 错 误 !");
getch();
system("cls");
}
return 0;
}
搜索更多相关主题的帖子: 解释 
2007-10-05 17:08
coachard
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:1251
专家分:0
注 册:2007-8-12
收藏
得分:0 
要求输入密码,如果密码正确,则通过;如果密码不对,则显示<密 码 错 误 !>再要求重新输入(后半句本身就有问题,看来你不是标红色的不理解,你是整段都不理解)

代码红色部分的理解重点是:函数getch()无缓冲。。。

偶学编程,也许本身就是一个错。。。
2007-10-05 17:23
crazyboy216
Rank: 1
等 级:新手上路
帖 子:62
专家分:0
注 册:2007-6-28
收藏
得分:0 
根本就达不到你所说的 它是怎么样造成那个将输入的字符变成 * 号的效果的 的要求.
2007-10-05 17:39
coachard
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:1251
专家分:0
注 册:2007-8-12
收藏
得分:0 
以下是引用crazyboy216在2007-10-5 17:39:23的发言:
根本就达不到你所说的 它是怎么样造成那个将输入的字符变成 * 号的效果的 的要求.

可以的,因为getch()本身不回显。。。


偶学编程,也许本身就是一个错。。。
2007-10-05 17:40
jackys2006
Rank: 1
等 级:新手上路
帖 子:195
专家分:0
注 册:2006-3-10
收藏
得分:0 
以下是引用coachard在2007-10-5 17:23:23的发言:

代码红色部分的理解重点是:函数getch()无缓冲。。。

问题是你理解不理解?
如果你认为我整段都不理解,那你觉得你上面几个字就能解决我心中疑惑?


2007-10-05 18:33
静思
Rank: 3Rank: 3
来 自:沈阳
等 级:新手上路
威 望:8
帖 子:630
专家分:0
注 册:2006-2-28
收藏
得分:0 
13代表回车键......
当输入回车键时,密码输入结束。当输入一个退格符(\b)时
if(pass[0]=='\b')
{
count=0;//如果输入的第一个字符为退格符,重新输入
continue;
}
else if(pass[count-1]=='\b')
{//中间输入的字符含有退格符时所进行的处理
printf("%c%c%c",'\b','\0','\b');//把位于退格符前的一个字符抹掉
count-=2;//字符数目做相应调整
}

[此贴子已经被作者于2007-10-5 18:41:56编辑过]


英者自知,雄者自胜
2007-10-05 18:40
jackys2006
Rank: 1
等 级:新手上路
帖 子:195
专家分:0
注 册:2006-3-10
收藏
得分:0 
以下是引用静思在2007-10-5 18:40:42的发言:
13代表回车键......
当输入回车键时,密码输入结束。当输入一个退格符(\b)时
if(pass[0]=='\b')
{
count=0;//如果输入的第一个字符为退格符,重新输入
continue;
}
else if(pass[count-1]=='\b')
{//中间输入的字符含有退格符时所进行的处理
printf("%c%c%c",'\b','\0','\b');//把位于退格符前的一个字符抹掉
count-=2;//字符数目做相应调整
}

哦,太感谢了,补充一点13是'\r'


2007-10-05 19:36
静思
Rank: 3Rank: 3
来 自:沈阳
等 级:新手上路
威 望:8
帖 子:630
专家分:0
注 册:2006-2-28
收藏
得分:0 
呵呵...‘\r’这个转义字符代表的就是回车

英者自知,雄者自胜
2007-10-05 19:47
jackys2006
Rank: 1
等 级:新手上路
帖 子:195
专家分:0
注 册:2006-3-10
收藏
得分:0 
那你知道其他那些控制字符的意义吗?
ASCII码有31个控制字符,他们的意义是什么你知道吗,
或者告诉我哪里可以找到它们的资料,
谢谢!

2007-10-05 21:46
静思
Rank: 3Rank: 3
来 自:沈阳
等 级:新手上路
威 望:8
帖 子:630
专家分:0
注 册:2006-2-28
收藏
得分:0 

键盘常用ASCII码 括号内代表相应ascii码的十进制数值
ESC键 VK_ESCAPE (27)
回车键: VK_RETURN (13)
TAB键: VK_TAB (9)
Caps Lock键: VK_CAPITAL (20)
Shift键: VK_SHIFT ($10)
Ctrl键: VK_CONTROL (17)
Alt键: VK_MENU (18)
空格键: VK_SPACE ($20/32)
退格键: VK_BACK (8)
左徽标键: VK_LWIN (91)
右徽标键: VK_LWIN (92)
鼠标右键快捷键:VK_APPS (93)

Insert键: VK_Insert (45)
Home键: VK_HOME (36)
Page Up: VK_PRIOR (33)
PageDown: VK_NEXT (34)
End键: VK_END (35)
Delete键: VK_Delete (46)

方向键(←): VK_LEFT (37)
方向键(↑): VK_UP (38)
方向键(→): VK_RIGHT (39)
方向键(↓): VK_DOWN (40)

F1键: VK_F1 (112)
F2键: VK_F2 (113)
F3键: VK_F3 (114)
F4键: VK_F4 (115)
F5键: VK_F5 (116)
F6键: VK_F6 (117)
F7键: VK_F7 (118)
F8键: VK_F8 (119)
F9键: VK_F9 (120)
F10键: VK_F10 (121)
F11键: VK_F11 (122)
F12键: VK_F12 (123)

Num Lock键: VK_NUMLOCK (144)
小键盘0: VK_NUMPAD0 (96)
小键盘1: VK_NUMPAD0 (97)
小键盘2: VK_NUMPAD0 (98)
小键盘3: VK_NUMPAD0 (99)
小键盘4: VK_NUMPAD0 (100)
小键盘5: VK_NUMPAD0 (101)
小键盘6: VK_NUMPAD0 (102)
小键盘7: VK_NUMPAD0 (103)
小键盘8: VK_NUMPAD0 (104)
小键盘9: VK_NUMPAD0 (105)
小键盘.: VK_DECIMAL (110)
小键盘*: VK_MULTIPLY (106)
小键盘+: VK_MULTIPLY (107)
小键盘-: VK_SUBTRACT (109)
小键盘/: VK_DIVIDE (111)

Pause Break键: VK_PAUSE (19)
Scroll Lock键: VK_SCROLL (145)

你自己慢慢看吧,

[此贴子已经被作者于2007-10-5 23:26:20编辑过]


英者自知,雄者自胜
2007-10-05 23:23
快速回复:[求助]解释下这个程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.034724 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved