2016-10-21 1 views
1

Ich habe meinen Code funktionierend gemacht (in Arbeit), aber ich habe ein Problem. Meine Registrierung Arbeit, aber die Anmeldung Teil Werke (liest) nur für die erste Zeile ... Lassen Sie uns sagen, ich habe meine Datei wie folgt (jedes Konto für jede Zeile):Zeile für Zeile aus der Datei lesen und den Ausgang/Eingang vergleichen

benutzer1 pass1
benutzer2 pass2
user3 Pass3
user4 pass4

es wird mir einen Zugriff nur geben, wenn ich den Benutzernamen als user1 und password als pass1, aber nicht für user2 und pass2. Wie kann ich das reparieren ??? Code:

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

das Problem sollte irgendwo hier sein:

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

aber ich weiß nicht, wie ich den Code zu beheben, wenn jemand, der das Problem beheben können und fügen Sie in einem Kommentar (Antwort) Ich wäre so dankbar. Wie auch immer, vielen Dank PS. Bedenken Sie nicht, ich bin nicht so gut in Programmierung, aber immer noch bereit zu lernen :)

+0

Zeit, um zu lernen, wie man einen Debugger benutzt. –

Antwort

0

Ihre Logik ist falsch.

Wenn der Benutzername und das Passwort nicht übereinstimmen, ist immer noch 0 und dann werden die Anweisungen in der else if Klausel ausgeführt.

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

Sie müssen die ganze Datei zuerst scannen und dann nur testen, ob der Benutzer/Passwort ist gefunden worden .:

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

BTW: Nicht direkt auf Ihr Problem zu tun hat: Bitte this SO article lesen.

Verwandte Themen