Benutzerregistrierung. Fehrbesserungsvorschläge gesucht!



  • Ich habe meinen Beitrag nochmals überarbeitet, ich hoffe doch sehr, dass er jetzt weniger missverständlich ist 😉



  • @roflo:

    1,2,3: Erldegit.
    4: Werde mich mal dran machen das zu trennen. Das Programm hier ist ja nur der Baustein zur "Registrierung".
    5: Benutzername und Passwort werden jetzt schon in einem Dokument gespeichert. Das habe ich bereits geändert. Die Dateien werden jetzt chronlogogisch 0,1,2,3 usw. gespeichert.
    Das mit den weiteren Daten, z.B. Datum finde ich eine super Idee. Werde mal schauen was da nützlich wäre!
    6: fflush(); ist ja nicht auf allen Plattformen kompatibel, deswegen mist. Bei getchar(); hatte ich immer das Problem, dass man einmal extra Enter drücken muss.
    Wie wäre da eine korrekte und funktionale Lösung? Rest nehme ich so an.
    7: Mache ich, sind aber aufgrund des "Counters" der jetzt die Dateinamen bestimmt sowieso rausgeflogen.

    Vielen Dank! 🙂



  • Es wäre irgendwie anständig wenigstens zu bemerken, dass ein Reihe von Beiträgen gelöscht wurden.


  • Mod

    EOP schrieb:

    Es wäre irgendwie anständig wenigstens zu bemerken, dass ein Reihe von Beiträgen gelöscht wurden.

    Die gelöschten Beiträge waren eine Bemerkung nicht wert.



  • Mein Beitrag war ausnahmsweise OK.


  • Mod

    EOP schrieb:

    Mein Beitrag war ausnahmsweise OK.

    EOP schrieb:

    Wutz hatte wohl etwas schlechte Laune. Soll schon mal vorkommen.

    Das ist dieser bemerkenswerte Erguss, um den das Forum getrauert hätte, wenn er unbemerkt verschwunden wäre? Dann darfst du in diesem Beitrag als ein Denkmal für deinen Kommentar ansehen.



  • Im Verhältnis zu diversen anderen Ergüssen meinerseits war der Beitrag m.E. voll OK. 🙂

    ps:
    Hätte nicht gedacht, dass du die gelöschten Beiträge für dein Poesiealbum aufhebst.


  • Mod

    EOP schrieb:

    ps:
    Hätte nicht gedacht, dass du die gelöschten Beiträge für dein Poesiealbum aufhebst.

    Was denkst du denn, wie der Weihnachtsmann sonst herausfindet, wer frech und wer artig war? Das wird alles in deine permanente Akte eingetragen.



  • 3:36, 5:14, 10:01 - du schläfst wohl nie.



  • Huch was war denn mit mir gestern los 😮 Durch 10 Stunden Ritt quer über den Globus und Wutz Angriffe hat sich wohl übelster Mist zusammengebraut.....

    @Mrsonak: Bei der Eingabe kannst du weiter fgets mit einer festgelegten Maximalgrenze benutzen, andere Möglichkeiten sehe ich nicht. Ist auch per se nicht für Bufferoverflows anfällig. Deine eine konstruktionen mit strcat aber schon.
    fflush ist btw standard und für Ausgabeströme gut definiert.



  • roflo schrieb:

    Ist auch per se nicht für Bufferoverflows anfällig. Deine eine konstruktionen mit strcat aber schon.

    Dann zeig ihn mal in dem Fall, du Held des overflows.



  • Wtf, bin ich jetzt völlig durch den Wind?!

    char getUserName [20]; 
    char bufferUserName[24]; 
    char bufferUserPW[30] = {"PW"};
    
    strcpy(bufferUserName,getUserName); 
    strcat(bufferUserName,".txt");
    strcat(bufferUserPW, bufferUserName);
    

    Diese Zeilen haben mich wohl durch fehlenden Codetags und Kotzformatierung völlig aus der Bahn geworfen.
    Ich kann Wutz jetzt schon irgenwie verstehen.

    'tschuldigung, werd mich erstmal hinlegen und Tee trinken...


  • Mod

    roflo schrieb:

    fflush ist btw standard und für Ausgabeströme gut definiert.

    Aber auf Eingabeströmen, wie hier gemacht, ist es undefiniertes Verhalten. Das ist auch kein theoretischer Ausnahmefall, sondern wird dir auf Nicht-Windowssystemen tatsächlich jede Menge Unfug anrichten.



  • Also mittlerweile siehts so aus...

    Das hier ist die Initialisierung. Vor dem ersten Start.

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[])
    {
        mkdir("User_Data");
    
        FILE *UserData;
        if((UserData = fopen ("User_Data\\COUNTER_User.txt","w")) == 0) {
                     fprintf(stderr,"Fehler bei der Initialisierung.");
                     sleep(1000);
                     return 1;
                     }
        else {
                     int temp = 0;
                     fprintf(UserData,"%d",temp);
                     fclose(UserData);
                     }
    
      system("PAUSE");	
      return 0;
    }
    

    Ich habe die Codetags jetzt kapiert. Muhahah.

    Das ist das überarbeitete alte.
    Wie ich die Daten allerdings wieder auslesen soll weiß ich nicht. Werde wohl doch wieder den Benutzernamen als Datei oder Ordnernamen verwenden, dann finde ich das jeweils zugehörige Passwort auch wieder.

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    void chomp(char *str) {
       size_t p=strlen(str);
       str[p-1]='\0'; }
    
    int main(int argc, char *argv[])
    {   FILE  *UserCounter;
        int answerUserCounter;
        int newUserCounter ;
    
        if((UserCounter = fopen("User_Data\\COUNTER_User.txt","r")) == NULL) {
                        fprintf(stderr, "Systemfehler1");
                        sleep(2000);
                        return 1;
                        }
        else {          
    
                               fscanf(UserCounter, "%d", &answerUserCounter);  
                               fclose(UserCounter);
                               }
    
        FILE *UserData;
    
        char getUserName [20];
        char getUserPW1 [20];
    
        int decisionName;      
    
    do{   
    
    printf ("Willkommen bei DD V1.0!\n\nLegen sie zunaechst ihren Benutzernamen und ihr Passwort fest.\nBenutzername: ");
           fgets(getUserName,20,stdin);
           chomp(getUserName);
    
                printf("Moechten sie diesen Benutzernamen festlegen?\n\n [1] Ja    | [2] Nein    | [3] Benutzerkontenerstellung abbrechen"); 
          decisionName=getch();
    
    if(decisionName=='3') {
          return 0;}
    }while(decisionName!='1');            
                                 char FileName [30] = {"User_Data\\"};
                                               char bufferUserCounter[10];
                                               sprintf(bufferUserCounter, "%d", answerUserCounter);
                                          strcat(FileName,bufferUserCounter);
                                          strcat(FileName,".txt");
    
    int decisionPW;
    do{     char getUserPW2 [20];
    do{
    printf("\n\nErster Schritt zum Erstellen des Benutzerkontos '%s' erfolgreich!\nWaehlen sie nun ihr Passwort\n\nPasswort: ",getUserName);
            fgets(getUserPW1,20,stdin);
            chomp(getUserPW1);  
    
                    printf("Passwort wiederholen: ");
                    fgets(getUserPW2,20,stdin);
                    chomp(getUserPW2);
    }while((strcmp(getUserPW1,getUserPW2))!=0);  
    
                printf("Moechten sie dieses Passwort festlegen?\n\n [1] Ja    | [2] Nein    | [3] Benutzerkontenerstellung abbrechen");
                decisionPW=getch();
    if(decisionPW=='3'){
           return 0; }             
    }while(decisionPW!='1');
    
    if((UserData = fopen(FileName, "w")) == NULL) {
                fprintf(stderr, "Systemfehler2.");
                return 1;
                }
    else {
                fprintf(UserData, "%s\n%s", getUserName, getUserPW1);
                          if((UserCounter = fopen("User_Data\\COUNTER_User.txt","w"))== NULL) {
                                        fprintf(stderr, "Systemfehler3.");
                                        sleep(2000);
                                        return 1;
                                        }
                          else {
                                        newUserCounter = answerUserCounter + 1;
                                        fprintf(UserCounter,"%d",newUserCounter);
                                        }
                }
    fclose(UserData);
    fclose(UserCounter);
    
    printf("\n\nErstellen des Benutzerkontos war erfolgreich!");
    sleep(3000);
    
    //Hier soll mal der Übergang zum eigentlichen Program hin
    
      return 0;
    }
    


  • MrSonak schrieb:

    Ich habe die Codetags jetzt kapiert. Muhahah.

    Dann drück jetzt mal die Tasten fürs Auto-Einrücken in Deiner IDE.
    Bei MSVC wären das Strg+A gefolgt von Alt+F8.


Anmelden zum Antworten