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

自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2004-06-17 20:09
zff_ff
Rank: 1
等 级:新手上路
帖 子:147
专家分:0
注 册:2004-5-12
收藏
得分:0 
#include<iostream.h>
ostream& aa( ostream& output){return output<<'*';}
/*定义一个流操纵算子*/
int main()
{
 const int Password=123456;
 int a;
 
 cin.tie(&aa);/*将输出流连入输入流上*/
 cin>>a;
 cin.tie(&cout);/*恢复输出流*/
 if(Password==a)
  cout<<"right"<<endl;
 else
  cout<<"wrong"<<endl;
 return 0;
}
这是我的思路,可是现在出现了一个问题
cin.tie(class ostream *),这里如何将aa转换为class ostream *
我试了N种方法也不行。只好请教高手了
是不是我的想法本来就是错误的,请高手指点

[此贴子已经被作者于2004-06-17 22:32:28编辑过]


偶是一只想要飞却忘了咋飞的菜鸟
2004-06-17 22:30
zff_ff
Rank: 1
等 级:新手上路
帖 子:147
专家分:0
注 册:2004-5-12
收藏
得分:0 

说错了,应该是aa的返回值

我尝试过cin.tie(&(cout<<aa));

虽然程序可以运行,但是却不是偶们想要的结果,狂晕中。。。。

如果是在windows窗口下就好办多了


偶是一只想要飞却忘了咋飞的菜鸟
2004-06-17 23:07
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 

现在的问题是,当你输入的时候,结果马上显示出来,这个是要避免的,也就是说,显示的应该为星号。

而当 cin 执行的时候,输入结果马上不加掩饰的显示了出来,这与 cin cout 是不是 tied 没有关系阿。你的那个想法我没理解。


自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2004-06-17 23:15
zff_ff
Rank: 1
等 级:新手上路
帖 子:147
专家分:0
注 册:2004-5-12
收藏
得分:0 

我记得我以前在书中看过c++在建立标准输入/输出环境而自动执行了cin.tie(&cout)

使得输入和输出达到同步,我的想法就是更改这个环境

cin.tie(&(cout<<aa));这样肯定是不行的

原因正如你所说的,他会先执行cout<<aa,然后在执行cin.tie(&cout)

所以写的和没写差不多,让我郁闷半死


偶是一只想要飞却忘了咋飞的菜鸟
2004-06-17 23:46
zff_ff
Rank: 1
等 级:新手上路
帖 子:147
专家分:0
注 册:2004-5-12
收藏
得分:0 

楼主什么时候给出正确答案啊?

要不先给点提示好吗?


偶是一只想要飞却忘了咋飞的菜鸟
2004-06-18 00:48
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
guanyou
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2004-6-14
收藏
得分:0 

这是我做的程序,肯定有不少错误,请各位高手指正!!

#include<iostream.h> #include<stdio.h> #include<cstdlib> #include<conio.h> #include<string.h>

void main() { int i=0; char ch,pass[7],password[7]="123456"; cout<<"Enter your password."<<endl; do{ ch=getch(); if(ch!='\r'){ pass[i]=ch; pass[6]='\0'; putchar('*');} i++; }while(ch!='\r'); if(strcmp(pass,password)==0) cout<<'\n'<<"You are passed"<<endl; else cout<<'\n'<<"The password is wrong"<<endl; system("pause"); }


2004-06-18 15:06
快速回复:给大家出到有趣的题目:)
数据加载中...
 
   



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

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