C 逐行读取文件并比较输出/输入

C 逐行读取文件并比较输出/输入,c,C,我已经使我的代码工作(接近工作),但我有一个问题。我的注册工作,但登录部分的工作(读)只为第一行。。。假设我有这样的文件(每行的每个帐户): 用户1密码1 用户2密码2 user3 pass3 用户4密码4 只有当我将用户名输入为user1,密码输入为pass1时,它才会授予我访问权限,但对于user2和pass2则不会。我怎样才能解决这个问题???代码: #include <stdio.h> #include <stdlib.h> #include "rlutil.h"

我已经使我的代码工作(接近工作),但我有一个问题。我的注册工作,但登录部分的工作(读)只为第一行。。。假设我有这样的文件(每行的每个帐户):

用户1密码1
用户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");
  }
顺便说一句:与您的问题没有直接关系:
请阅读。

学习如何使用调试器的时间到了。学习如何使用调试器的时间到了。