| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3695 人关注过本帖
标题:给大家出到有趣的题目:)
取消只看楼主 加入收藏
jellen
Rank: 1
等 级:新手上路
威 望:1
帖 子:107
专家分:0
注 册:2004-5-3
收藏
 问题点数:0 回复次数:7 
给大家出到有趣的题目:)
试编一个密码框的模拟程序:
就是在Dos窗口中你输入字符出现的是'*'号,然后验证密码的正确性(比如密码是“12345”),如果密码错误就提示用户,若密码正确就打印:“You are passed!”,呵呵,大家有空可以做做。
搜索更多相关主题的帖子: 密码 用户 
2004-06-17 20:05
jellen
Rank: 1
等 级:新手上路
威 望:1
帖 子:107
专家分:0
注 册:2004-5-3
收藏
得分:0 

这个题目最重要的地方是怎样在用户按键的时候显示星号,还有就是用户可以使用Backspace删除以前输入的内容,这里需要一点小技巧。 我对C++的I/O系统不熟悉,就用C语言实现了(不过C++是全面支持C语言的,在C++也可以这样做)


再见,理想!
2004-06-18 08:13
jellen
Rank: 1
等 级:新手上路
威 望:1
帖 子:107
专家分:0
注 册:2004-5-3
收藏
得分:0 

要实现打印星号,我们可以先获取用户的键盘输入,不回显,然后自己用一个星号代替。一般的接受输入函数都不满足我们的要求(比如getchar(), cin, 这些函数都需要缓冲区的,我们不能直接接受用户输入,就是只有敲了回车输入才有效), 不过C语言里面的getch()函数正好符合这个要求。大家可以用这个函数试试(在TC2.0, Dev-C++里面都可以使用)

我在今天晚上贴我的程序吧:)


再见,理想!
2004-06-18 08:29
jellen
Rank: 1
等 级:新手上路
威 望:1
帖 子:107
专家分:0
注 册:2004-5-3
收藏
得分:0 

guanyou,

做的好!你的程序基本上满足了要求:) 现在你还可以想想,如何对用户的错误输入做处理,比如用户打错字想用Backspace删除然后修改,你应该怎么实现(按一下Backspace, '*'就要少一个:),然后注意用户输入的长度最好不要有限制(我们不知道用户会输入多少字符,你可以用new, delete动态实现)

Anyway, good done!

再见,理想!
2004-06-18 15:30
jellen
Rank: 1
等 级:新手上路
威 望:1
帖 子:107
专家分:0
注 册:2004-5-3
收藏
得分:0 

这是我写的代码(用纯C完成,在WinXP + Dev-C++环境中编译通过),大家可以参考一下:

#include <stdio.h> #include <string.h> #include <stdlib.h>

#define ADDSIZ 32

int main() { int ch; char *str; int i = 0; int maxSize = 64; str = (char *)malloc(sizeof(char)*maxSize); if(!str) /*判断内存分配是否失败*/ { printf("Memory Access Failed!\n"); exit(1); } printf("Enter password: "); while((ch = getch()) != '\r') { if(i > maxSize-1) /*是否越界*/ { maxSize += ADDSIZ; str = (char *)realloc(str, sizeof(char)*maxSize); if(!str) { printf("Memory Access Failed!\n"); exit(1); } } if(ch == 8) /*处理Backspace*/ { if(i > 0) { printf("\b \b"); /*注意这里!!*/ --i; } } else { str[i++] = ch; putchar('*'); } } str[i] = '\0'; if(strcmp(str, "12345") == 0) printf("\nYou are passed!\n"); else printf("\nPassword wrong!\n"); system("PAUSE"); return 0; }


再见,理想!
2004-06-18 17:07
jellen
Rank: 1
等 级:新手上路
威 望:1
帖 子:107
专家分:0
注 册:2004-5-3
收藏
得分:0 

你加空格没有? 达到那个效果就是:退格==》空格==》退格(空格就是把以前的星号覆盖)


再见,理想!
2004-06-18 18:53
jellen
Rank: 1
等 级:新手上路
威 望:1
帖 子:107
专家分:0
注 册:2004-5-3
收藏
得分:0 

哦,我试了一下,用cout应该这样实现:

#include <iostream> #include <stdio.h> #include <cstdlib> #include <conio.h> using namespace std;

int main() { int ch; while((ch = getch()) != EOF) { if(ch == 8) cout<<'\b'<<' '; //这里少一个'\b' putchar(ch); } }


再见,理想!
2004-06-18 19:02
jellen
Rank: 1
等 级:新手上路
威 望:1
帖 子:107
专家分:0
注 册:2004-5-3
收藏
得分:0 
楼上的朋友,程序通过
但是你的程序里用goto语句可不是一个好习惯,以后注意:)

再见,理想!
2004-06-24 09:19
快速回复:给大家出到有趣的题目:)
数据加载中...
 
   



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

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