Code Bye

为什么两次输入的都是一样的,但数出来却多了个‘?’


================
这是代码:
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};
就可以了。

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);
}

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明为什么两次输入的都是一样的,但数出来却多了个‘?’