C 逐行读取文件并比较输出/输入
我已经使我的代码工作(接近工作),但我有一个问题。我的注册工作,但登录部分的工作(读)只为第一行。。。假设我有这样的文件(每行的每个帐户): 用户1密码1C 逐行读取文件并比较输出/输入,c,C,我已经使我的代码工作(接近工作),但我有一个问题。我的注册工作,但登录部分的工作(读)只为第一行。。。假设我有这样的文件(每行的每个帐户): 用户1密码1 用户2密码2 user3 pass3 用户4密码4 只有当我将用户名输入为user1,密码输入为pass1时,它才会授予我访问权限,但对于user2和pass2则不会。我怎样才能解决这个问题???代码: #include <stdio.h> #include <stdlib.h> #include "rlutil.h"
用户2密码2
user3 pass3
用户4密码4 只有当我将用户名输入为user1,密码输入为pass1时,它才会授予我访问权限,但对于user2和pass2则不会。我怎样才能解决这个问题???代码:
#include <stdio.h>
#include <stdlib.h>
#include "rlutil.h"
void Login();
void Register();
char username[32];
char password[32];
char acc[32];
char pw[32];
int main()
{
int logreg;
printf("Press '1' For Login");
printf("Press '2' For Register\n");
logreg = getch();
printf("\n------------------------------------------------\n");
tester:
;
if (logreg == '1')
{
Login();
}
else if (logreg == '2')
{
Register();
}
else
{
printf("\nInvalid Input!!! Choose between '1' or '2' !!!\n");
logreg = getch();
goto tester;
}
return 0;
}
void Login()
{
start:
;
char answer;
// Vnesuvanje na username
printf("\nEnter your Username: ");
scanf("%s",username);
// Vnesuvanje na Password
printf("\nEnter your Password: ");
scanf(" %s",password);
FILE *fData;
// Otvara file za citanje
fData = fopen("database.txt", "rt");
if (!fData)
{
printf("The file can not be opened\n\a\a");
}
int found=0;
while(!feof(fData) && !found)
{
fscanf(fData, "%s\t%s", acc, pw);
if (strcmp(username, acc) == 0 && strcmp(password, pw) == 0)
{
setColor(LIGHTGREEN);
printf("\nSuccessfuly logged it to our WebSite\n\n");
setColor(GREY);
found = 1;
getch();
break;
}
else if (!found)
{
setColor(LIGHTRED);
printf("\nNo Access to our WebSite\n\n");
printf("Invalid username or password!!!\n\n");
setColor(GREY);
printf("Would you like to try again?? [y/n] ");
answer = getch();
found = 0;
printf("\n\n------------------------------------------------\n");
break;
}
}
fclose(fData);
tester2:
;
//proverka za Povtorno pustanje na programata
if (answer== 'y')
{
goto start;
}
else
{
if (answer!='n')
{
printf("Please choose between 'y' or 'n' !!!\n\n");
answer = getch();
goto tester2;
}
else
{
getch();
return 0;
}
}
}
void Register()
{
char acc[32];
char pw[32];
FILE *fData;
fData = fopen("database.txt", "a");
if (!fData)
{
printf("File could not be opened\n\a\a");
getchar();
return;
}
printf("Enter your desired Username: ");
scanf("%s", acc);
printf("Enter your desired Password: ");
scanf("%s", pw);
printf("\n");
fprintf(fData, "%s\t%s\n", acc, pw);
fclose(fData);
}
但是我不知道如何修复代码,如果有人能够修复并粘贴到评论(答案)中,我会非常感激。
无论如何,非常感谢你
别介意我,我不太擅长编程,但仍然愿意学习:)你的逻辑是错误的
如果用户名和密码不匹配,则found
仍然为0,然后将执行else If
子句中的语句
if (strcmp(username, acc) == 0 && strcmp(password, pw) == 0)
{
printf("\nSuccessfuly logged it to our WebSite\n\n");
found = 1;
getch();
break;
}
else if (!found)
{
printf("\nNo Access to our WebSite\n\n");
printf("Invalid username or password!!!\n\n");
printf("Would you like to try again?? [y/n] ");
answer = getch();
found = 0;
printf("\n\n------------------------------------------------\n");
break;
}
您需要先扫描整个文件,然后仅在找到用户/密码时进行测试:
while (!feof(fData) && !found)
{
fscanf(fData, "%s\t%s", acc, pw);
if (strcmp(username, acc) == 0 && strcmp(password, pw) == 0)
{
printf("\nSuccessfuly logged it to our WebSite\n\n");
found = 1;
getch();
break;
}
}
if (!found)
{
printf("\nNo Access to our WebSite\n\n");
printf("Invalid username or password!!!\n\n");
printf("Would you like to try again?? [y/n] ");
answer = getch();
found = 0;
printf("\n\n------------------------------------------------\n");
}
顺便说一句:与您的问题没有直接关系:
请阅读。您的逻辑错误
如果用户名和密码不匹配,则found
仍然为0,然后将执行else If
子句中的语句
if (strcmp(username, acc) == 0 && strcmp(password, pw) == 0)
{
printf("\nSuccessfuly logged it to our WebSite\n\n");
found = 1;
getch();
break;
}
else if (!found)
{
printf("\nNo Access to our WebSite\n\n");
printf("Invalid username or password!!!\n\n");
printf("Would you like to try again?? [y/n] ");
answer = getch();
found = 0;
printf("\n\n------------------------------------------------\n");
break;
}
您需要先扫描整个文件,然后仅在找到用户/密码时进行测试:
while (!feof(fData) && !found)
{
fscanf(fData, "%s\t%s", acc, pw);
if (strcmp(username, acc) == 0 && strcmp(password, pw) == 0)
{
printf("\nSuccessfuly logged it to our WebSite\n\n");
found = 1;
getch();
break;
}
}
if (!found)
{
printf("\nNo Access to our WebSite\n\n");
printf("Invalid username or password!!!\n\n");
printf("Would you like to try again?? [y/n] ");
answer = getch();
found = 0;
printf("\n\n------------------------------------------------\n");
}
顺便说一句:与您的问题没有直接关系:
请阅读。学习如何使用调试器的时间到了。学习如何使用调试器的时间到了。