【问题标题】:Username & Password don't match even if I input correctly即使我输入正确,用户名和密码也不匹配
【发布时间】:2021-12-11 06:50:20
【问题描述】:

我正在尝试创建一个程序以使用用户名和密码进入系统。但是在创建帐户后,当我输入我的用户名和密码(从 SignUP 功能存储)登录时,它显示不正确。我在哪里犯了错误,我该如何解决?我已经给出了与这个问题相关的具体代码。 TIA

struct information
{
char username[20];
char password[20];
int date, month, year;
char pnumber[20];
int age[20];
char fname[20];
char lname[20];
char fathname[20];
char mothname[20];
char address[50];

};  

void signup()
{
char username[20];
char password[20];
int passwordlength, i, seek = 0;
char ch;
FILE *fp, *fu;
struct information u1;
struct information p1;


// Opening file to
// write data of a user
fp = fopen("username.txt", "ab");

system("cls");
printf("\n\n!!!!!CREATE YOUR ACCOUNT!!!!!");

printf("\n\nFIRST NAME...");
scanf("%19s", u1.fname);

printf("\nLAST NAME...");
scanf("%19s", u1.lname);

printf("\nFATHER's NAME...");
scanf("%19s", u1.fathname);

printf("\nMOTHER's NAME...");
scanf("%19s", u1.mothname);

printf("\nADDRESS..");
scanf("%19s", u1.address);

printf("\nDATE OF BIRTH...");
printf("\nDATE-");
scanf("%d", &u1.date);
printf("\nMONTH-");
scanf("%d", &u1.month);
printf("\nYEAR-");
scanf("%d", &u1.year);

printf("\nPHONE NUMBER...");
scanf("%19s", u1.pnumber);

printf("\nAGE...");
scanf("%d", &u1.age);

printf("\nUSERNAME.. ");
scanf("%19s", u1.username);

printf("\nPASSWORD..");
scanf("%19s", p1.password);


fwrite(&u1, sizeof(u1), 1, fp);

fclose(fp);
printf("\n\nACCOUNT CREATED SUCCESSFULLY.\n");

char option[10];
printf("\nPRESS ANY KEY THEN ENTER TO GO TO SIGN IN PAGE");
scanf("%s", option);
signin();
}

void signin()
{
system("cls");

char username[20];
char password[20];

int i, j, k;
char ch;
FILE *fp, *fu;
struct information u1;
struct information p1;


// Opening file of
// user data
fp = fopen("username.txt","rb");

if (fp == NULL)
{
    printf("\nERROR IN OPENING FILE\n");
    printf("FILE DOESN'T EXIST\nYOU HAVE TO CREATE AN ACCOUNT FIRST\n");
    printf("PRESS ANY KEY & ENTER TO CREATE AN ACCOUNT\n");
    char option[10];
    scanf("%s", option);
    signup();
}
gotoxy(35, 10);
printf("==== LOG IN ====");

// Take input
gotoxy(35, 12);
printf("ENTER USERNAME.. ");
scanf("%19s", username);

gotoxy(35, 14);
printf("ENTER PASSWORD.. ");
scanf("%19s", password);


// Checking if username & password
// exists in the file or not
while (fread(&u1, sizeof(u1), 1, fp))
{
    if (strcmp(username, u1.username) == 0)
        if (strcmp(password, u1.password) == 0)
        {
            mainmenu();
        }

fclose(fp);
}

【问题讨论】:

  • 请删除与您的问题无关的代码部分。
  • 请清理您的代码以使其成为minimal reproducible example。例如删除所有注释掉的代码并删除所有不必要的代码,例如菜单。如果你付出努力,你更有可能得到答案,也许更重要的是,减少代码也是一种很好的调试技术,甚至可以让你自己找到问题。
  • 您的代码会产生许多警告,甚至无法编译。除了因为在所有首都大喊大叫而受到严重冒犯。
  • @Barmar:那是怎么复制的?
  • 您应该正确缩进您的代码,例如像您的 C 教科书中的示例一样。即使对于专家来说,也很难处理格式错误的代码,更不用说初学者了。

标签: c file


【解决方案1】:

signup() 函数中,您将密码读入p1.password 字段,但随后仅将u1 结构写入文件。只需将scanf("%19s", p1.password); 更改为scanf("%19s", u1.password);

【讨论】:

  • 非常感谢。我不敢相信我错过了那些微小的细节。我为此工作了好几个小时。
猜你喜欢
  • 2015-05-18
  • 2011-10-21
  • 2021-04-10
  • 1970-01-01
  • 2021-04-04
  • 2020-07-21
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
相关资源
最近更新 更多