就是在Dos窗口中你输入字符出现的是'*'号,然后验证密码的正确性(比如密码是“12345”),如果密码错误就提示用户,若密码正确就打印:“You are passed!”,呵呵,大家有空可以做做。
就是在Dos窗口中你输入字符出现的是'*'号,然后验证密码的正确性(比如密码是“12345”),如果密码错误就提示用户,若密码正确就打印:“You are passed!”,呵呵,大家有空可以做做。
#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编辑过]
说错了,应该是aa的返回值
我尝试过cin.tie(&(cout<<aa));
虽然程序可以运行,但是却不是偶们想要的结果,狂晕中。。。。
如果是在windows窗口下就好办多了
现在的问题是,当你输入的时候,结果马上显示出来,这个是要避免的,也就是说,显示的应该为星号。
而当 cin 执行的时候,输入结果马上不加掩饰的显示了出来,这与 cin cout 是不是 tied 没有关系阿。你的那个想法我没理解。
我记得我以前在书中看过c++在建立标准输入/输出环境而自动执行了cin.tie(&cout)
使得输入和输出达到同步,我的想法就是更改这个环境
cin.tie(&(cout<<aa));这样肯定是不行的
原因正如你所说的,他会先执行cout<<aa,然后在执行cin.tie(&cout)
所以写的和没写差不多,让我郁闷半死
这个题目最重要的地方是怎样在用户按键的时候显示星号,还有就是用户可以使用Backspace删除以前输入的内容,这里需要一点小技巧。 我对C++的I/O系统不熟悉,就用C语言实现了(不过C++是全面支持C语言的,在C++也可以这样做)
要实现打印星号,我们可以先获取用户的键盘输入,不回显,然后自己用一个星号代替。一般的接受输入函数都不满足我们的要求(比如getchar(), cin, 这些函数都需要缓冲区的,我们不能直接接受用户输入,就是只有敲了回车输入才有效), 不过C语言里面的getch()函数正好符合这个要求。大家可以用这个函数试试(在TC2.0, Dev-C++里面都可以使用)
我在今天晚上贴我的程序吧:)
这是我做的程序,肯定有不少错误,请各位高手指正!!
#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"); }