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; }
在C++编译是还要加这个头文件
#include<conio.h>
为什么我用cout<<"\b"<<"\b";达不到效果??
#include <stdio.h>
#include <string.h>
int main()
{
char a[6]="12345",b[6]; /* 密码保存在文件中也一样,就是写的麻烦些,所以就保存数组中 */
int i;
pb:
printf("input the password:");
for(i=0;i<5;i++) {
b[i]=getch(); if(b[i]=='\r') goto pb1; putchar('*');
}
getch(); b[i]='\0';
pb1: if(!(strcmp(a,b)))
printf("\nyou are passed.");
else
{
printf("\nplease input password again\n");
goto pb;
}
return 0;
}
[此贴子已经被作者于2004-06-23 16:56:02编辑过]