Logisches Problem? Oder falsche Syntax?



  • Hmm.
    Das Programm läuft eigentlich bis jetzt, ist noch ziemlich klein... steht erst das Grundgerüst (die erste Funktion). Jedoch gibt es schon ein Problem. Fehler vom Compilier gibts keine, das heisst ich kann nirgends ansetzen... und ich sehe auch den Fehler nicht.

    Problem:
    Auch wenn man die richtigen Zugangsdaten (in diesem Fall: User: Claudio Bernasconi PW: passwort) eingibt, gibt es immer die meldungen, dass man ein normaler user ist.. also keine Adminrechte dann zugewiesen werden können etc. Warum? 😞

    #include <stdio.h>
    #include <stdbool.h>
    #include <stdlib.h>
    
    bool checkuser     (char vorname[40], char nachname[40], char passwort[40], char admin_vorname[40], 
                        char admin_nachname[40], char admin_passwort[40])
    {
      bool userok;
      if(vorname[40] == admin_vorname[40] && nachname[40] == admin_nachname[40] && admin_passwort[40] == passwort[40])
      {
        userok = 1;             
      }
      else
      {
        userok = 0;  
      }
      printf("\n%d\n\n",userok);
      return userok;     
    }
    
    int main(int argc, char *argv[])
    {
      char puffer[100];
      char vorname[40];
      char nachname[40];
      char passwort[40];
      char admin_vorname[40]  = "Claudio";
      char admin_nachname[40] = "Bernasconi";
      char admin_passwort[40] = "passwort";
      bool userok = false;
    
      printf("Geben Sie den Vornamen ein.\n");
      fgets(puffer,sizeof(puffer),stdin);
      sscanf(puffer,"%s",vorname);
    
      printf("Geben Sie den Nachnamen ein.\n");
      fgets(puffer,sizeof(puffer),stdin);
      sscanf(puffer,"%s",nachname);
    
      printf("Geben Sie das Kennwort ein.\n");
      fgets(puffer,sizeof(puffer),stdin);
      sscanf(puffer,"%s",passwort);   
    
      userok = checkuser(vorname,nachname,passwort,admin_vorname,admin_nachname,admin_passwort);
    
      if(userok == 1)
      {
        printf("Hallo Administrator!\n"); 
    /*Hier hat man die Zugriffsrechte erhalten. Und die Prüfung bestanden.*/         
      }
      else
      {
        printf("Hallo %s %s\n\n",vorname,nachname);
    /*Hier hat man keine Zugriffsrechte und das Programm soll wieder an den Anfang springen.*/
      }
    
      system("PAUSE");	
      return 0;
    }
    

    Ich hoffe, es kann mir jemand helfen 😞



  • Du machst einen Pointer-Vergleich (ala: zeigen die Parameter "vorname" und "admin_vorname" auf den selben Speicherbereich?), aber an der Stelle benötigst du einen Werte-Vergleich (enthalten die Bereiche, auf die "vorname" und "admin_vorname" zeigen, den selben Text?). Also solltest du die ganzen Vergleiche (x==y) ersetzen durch man: strcmp.



  • Ach ja, ich dummer Mensch 🙄

    Herzlichen Dank für deine Hilfe! Und hier nochmals der richtige Code, falls es jemandem anderen noch helfen könnte der auch so doof ist wie ich 😋

    #include <stdio.h>
    #include <stdbool.h>
    #include <stdlib.h>
    #include <string.h>
    
    bool checkuser     (char vorname[40], char nachname[40], char passwort[40], char admin_vorname[40], 
                        char admin_nachname[40], char admin_passwort[40])
    {
      bool userok;
      if (strcmp(vorname,admin_vorname) == 0 && strcmp(nachname,admin_nachname) == 0 && strcmp(passwort,admin_passwort) == 0)
      { userok = 1; }
      else
      { userok = 0; }
    
      return userok;     
    }
    
    int main(int argc, char *argv[])
    {
      char puffer[40];
      char vorname[40];
      char nachname[40];
      char passwort[40];
      char admin_vorname[40]  = "Claudio";
      char admin_nachname[40] = "Bernasconi";
      char admin_passwort[40] = "passwort";
      bool userok = false;
    
      printf("Geben Sie den Vornamen ein.\n");
      fgets(puffer,sizeof(puffer),stdin);
      sscanf(puffer,"%s",vorname);
    
      printf("Geben Sie den Nachnamen ein.\n");
      fgets(puffer,sizeof(puffer),stdin);
      sscanf(puffer,"%s",nachname);
    
      printf("Geben Sie das Kennwort ein.\n");
      fgets(puffer,sizeof(puffer),stdin);
      sscanf(puffer,"%s",passwort);   
    
      userok = checkuser(vorname,nachname,passwort,admin_vorname,admin_nachname,admin_passwort);
    
      if(userok == 1)
      {
        /*Administratorenrechte*/       
      }
      else
      {
        /*Zugriffverweigert*/
      }
    
      system("PAUSE");	
      return 0;
    }
    

    Neuer Codeblock:

    bool checkuser     (char vorname[40], char nachname[40], char passwort[40], char admin_vorname[40], 
                        char admin_nachname[40], char admin_passwort[40])
    {
      bool userok;
      if (strcmp(vorname,admin_vorname) == 0 && strcmp(nachname,admin_nachname) == 0 && strcmp(passwort,admin_passwort) == 0)
      { userok = 1; }
      else
      { userok = 0; }
    
      return userok;     
    }
    


  • Mach puffer bitte genauso klein wie name, vorname, passwort, etc., bzw. begrenz die Eingabe bei fgets() immer auf 40. So wie es jetzt ist kannst du ganz locker einen Buffer-Overflow bekommen. Da kannst du gleich gets() nehmen 😉



  • Ja klar. Werde ich noch umändern. Herzlichen Dank!!!


Anmelden zum Antworten