================
这是代码:
struct Messages{
char count[20];
char password[20];
};
int passw(struct Messages *pass,int sort)
{ int j=0,i=0,f=0;
struct Messages *pass1=pass,pass2;
do{
if(sort==1)
printf(“\t\t密码:”);
else
{
i=0;j=0;f=0;
pass1=&pass2;
printf(“\n\t\t再次输入密码:”);
}
;
while((pass1->password[i]=getch())!=”\r”)
{
if(pass1->password[i]==”\b”&&j!=0)
{
printf(“\b \b”);
j–;
f=1;
i–;
}
else
f=0;
if(f==0)
printf(“*”);
i++;
j++;
}
sort++;
}while(sort==2);
puts(pass->password);
puts(pass2.password);
if(sort==3&&strcmp(pass->password,pass2.password)!=0)
{
printf(“\n\t\t【两次密码输入错误!请重新注册!】”);
Sleep(30000);
return 0;
}
return 1;
}
解决方案
10
题主 在声明 pass2的时候,没有初始化。
pass2 = {0};
就可以了。
pass2 = {0};
就可以了。
80
原因是 你输入 123456 的时候在数组里 存的是123456 当你在输入 abcd的时候那么数组就会自动的把abcd覆盖到1234里 但是 5和6 是没有覆盖的所以还是会显示出来,所以当你再次使用数组的时候要 memset 一下
10
仅供参考:
#include <conio.h> #include <stdio.h> char pw[40]; int i,ch; FILE *f; void main() { cprintf("\r\nPassword:"); i=0;pw[i]=0; while (1) { ch=getch(); if (ch==13 || i>=39) break; switch (ch) { case 27: cprintf("\rPassword: %40s"," "); cprintf("\rPassword: "); i=0;pw[i]=0; break; case 8: if (i>0) { i--; pw[i]=0; cprintf("\b \b"); } break; default: pw[i]=ch; i++; pw[i]=0; cprintf("*"); break; } } cprintf("\r\n"); f=fopen("password.txt","w"); fprintf(f,"%s\n",pw); fclose(f); }