就是在Dos窗口中你输入字符出现的是'*'号,然后验证密码的正确性(比如密码是“12345”),如果密码错误就提示用户,若密码正确就打印:“You are passed!”,呵呵,大家有空可以做做。
就是在Dos窗口中你输入字符出现的是'*'号,然后验证密码的正确性(比如密码是“12345”),如果密码错误就提示用户,若密码正确就打印:“You are passed!”,呵呵,大家有空可以做做。
这个题目最重要的地方是怎样在用户按键的时候显示星号,还有就是用户可以使用Backspace删除以前输入的内容,这里需要一点小技巧。 我对C++的I/O系统不熟悉,就用C语言实现了(不过C++是全面支持C语言的,在C++也可以这样做)
要实现打印星号,我们可以先获取用户的键盘输入,不回显,然后自己用一个星号代替。一般的接受输入函数都不满足我们的要求(比如getchar(), cin, 这些函数都需要缓冲区的,我们不能直接接受用户输入,就是只有敲了回车输入才有效), 不过C语言里面的getch()函数正好符合这个要求。大家可以用这个函数试试(在TC2.0, Dev-C++里面都可以使用)
我在今天晚上贴我的程序吧:)
guanyou,
做的好!你的程序基本上满足了要求:) 现在你还可以想想,如何对用户的错误输入做处理,比如用户打错字想用Backspace删除然后修改,你应该怎么实现(按一下Backspace, '*'就要少一个:),然后注意用户输入的长度最好不要有限制(我们不知道用户会输入多少字符,你可以用new, delete动态实现)
Anyway, good done!这是我写的代码(用纯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; }
哦,我试了一下,用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); } }