我用C语言编写了此代码,以创建多个用户并使用在该程序中注册用户时提供的用户名和密码登录。但是我得到的结果与我的第一个动作相同。
例如,我已经使用uname注册为 test1 ,并通过了 test123 ,如果我在登录部分输入此密码,则会收到“登录成功”消息但是当我尝试输入任何随机uname并通过登录部分后,它将仅显示“登录成功”消息。当我退出并重新运行该程序时,如果在登录时输入错误的凭据,则会收到“无效的详细信息”消息,但此后,如果尝试使用正确的凭据登录,则也会得到“无效的详细信息”味精知道代码有什么问题吗?
情况1:使用正确的凭据。
输入1
用户名= test1
密码= test123
输出=登录成功
输入2
用户名=错误的用户名
密码=错误的密码
预期输出=无效的详细信息
但是我得到的输出=登录成功
情况2:首先使用错误的凭据
输入1
用户名=错误的用户名
密码=错误的密码
输出=无效的详细信息
输入2
用户名= test1
密码= test123
预期输出=登录成功
但是我得到的输出=无效的详细信息
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
struct database
{
char user[20];
char pass[20];
char email[40];
}record;
int main()
{
int count, choice, entries, i, j, ls, check=0;
char mask;
char fileDump[10000][50];
char username[20];
char password[20];
FILE *fptr = fopen("E:\\login_practice.bin","ab+");
char dump[256];
Again:
printf("Welcome to user authentication program v1.2\n");
printf("\n1. Register\n");
printf("\n2. Login\n");
printf("\n3. Exit\n");
printf("\nEnter your choice: ");
scanf("%d", &choice);
switch(choice)
{
case 1:
printf("\nHow many user you want to register?\n");
printf("\nUsers = ");
scanf("%d", &entries);
for(count=1; count<=entries; count++)
{
FILE *fp = fopen("E:\\email.bin", "ab+");
printf("\nEnter your email: ");
scanf("%s", &record.email);
fprintf(fp, "%s\n", record.email);
fclose(fp);
printf("\nEnter a username: ");
scanf("%s", &record.user);
fprintf(fptr, "%s\n", record.user);
printf("\nEnter a password: ");
for(j=0; j<10; j++)
{
mask = getch();
if(mask == 13)
{
break;
}
else
{
record.pass[j] = mask;
mask = '*';
printf("%c", mask);
}
}
fprintf(fptr, "%s\n", record.pass);
printf("\nRegistration Successful.\n");
}
goto Again;
break;
case 2:
i=0;
while(fgets(dump, sizeof(dump),fptr))
{
strcpy(fileDump[i], dump);
i++;
}
ls=i;
printf("\nLines Scanned = %d\n", ls);
printf("\nEnter your username: ");
scanf("%s", &username);
printf("\nEnter your password: ");
for(j=0; j<10; j++)
{
mask = getch();
if(mask == 13)
{
break;
}
else
{
password[j] = mask;
mask = '*';
printf("%c", mask);
}
}
strcat(username, "\n");
strcat(password, "\n");
for(i=0; i<=ls; i+=2)
{
if(strcmp(fileDump[i], username)==0)
{
if(strcmp(fileDump[i+1], password)==0)
{
check++;
}
}
}
if(check == 1)
{
printf("\nLogin Successful.\n");
}
else
{
printf("\nInvalid Details Entered!\n");
}
goto Again;
break;
case 3:
exit(0);
break;
default:
printf("\nBad Choice!\n");
goto Again;
break;
}
fclose(fptr);
}