Login Programm



  • Hi, ich bin neu hier.
    Ich lerne gerade die Programmiersprache C++
    und dachte mir, ich versuche mal ein einfaches loginscriptartiges Programm,
    welches ich in PHP schon oft geschrieben habe.
    Leider hängt sich das Programm immer auf wenn ich es gestartet und einen
    neuen Benutzer erstellt habe.

    Hier der Code:

    #include <string>
    #include <iostream>
    
    using namespace std;
    
    class user {
          private: int id;
                   string name;
                   string pass;
    
          public:  void createUser(int theid, string thename, string thepass) {
                        id = theid;
                        name = thename;
                        pass = thepass;
                   }
    };
    
    int main() {
    
        int key;
        int userid = 0;
    
        while(key != 2) {
            system("cls");
            cout<<"#1 >> Login\n";
            cout<<"#2 >> New User\n\n";
            cin>>key;
        }
    
        if(key == 2) {
               system("cls");
               string loginname,loginpass;
               cout<<"Name: ";cin>>loginname;cout<<"\n";
               cout<<"Password: ";cin>>loginpass;cout<<"\n";
               user theuser[userid];
               theuser[userid].createUser(userid,loginname,loginpass);
               userid++;
        }     
    
        cout<<"\n";system("pause");   
    }
    

    Wäre nett wenn ihr mir helfen könntet.
    Mfg. paSe



  • Erstens würde ich createUser durch einen vernünftigen Konstruktor ersetzen. user theuser[userid]; ist meiner Meinung nach gar nicht erlaubt, da userid keine Konstante ist. Wenn es trotzdem geht, machst du einen Array der Länge null, was auch nicht erlaubt ist.



  • So nicht:

    cout<<"#1 >> Login\n";
    

    Ersetze das >> durch ein <<.

    Hier:

    user theuser[userid];
    

    erzeugst du ein Array der Länge 0. Und hier:

    theuser[userid].createUser(userid,loginname,loginpass);
    

    greifst du auf das erste Element zu, das nicht existiert. Folge: Absturz!

    Abgesehen davon empfielt es sich in C++ statt nackter Arrays std::vector zu benutzen.



  • Z2 schrieb:

    So nicht:

    cout<<"#1 >> Login\n";
    

    Ersetze das >> durch ein <<.

    🙄



  • Z2 schrieb:

    So nicht:

    cout<<"#1 >> Login\n";
    

    Ersetze das >> durch ein <<.

    ??? 😃
    Ich glaube da scheinst du dich versehen zu haben xD



  • Habe Gerade mal was probiert.
    Wenn ich aber

    int theuser[10];
    

    oder

    string theuser[10];
    

    oder

    void theuser[10];
    

    eingebe, compilt er erst garnicht.

    ...

    Ich schau mir mal die Alternative std::vector an!



  • paSe schrieb:

    Z2 schrieb:

    So nicht:

    cout<<"#1 >> Login\n";
    

    Ersetze das >> durch ein <<.

    ??? 😃
    Ich glaube da scheinst du dich versehen zu haben xD

    He, war noch früh am Morgen, als ich das geschrieben habe! 😉



  • paSe schrieb:

    Habe Gerade mal was probiert.
    Wenn ich aber

    int theuser[10];
    

    oder

    string theuser[10];
    

    oder

    void theuser[10];
    

    Der Datentyp war schon richtig, nur die Größenangabe war Müll (und die Position - am Ende des if()-Blockes wird das Array wieder pulverisiert)



  • paSe schrieb:

    int theuser[10];
    

    oder

    string theuser[10];
    

    oder

    void theuser[10];
    

    du musst als Typ schon "user" lassen.

    das mit deiner userid stimmt nicht, du erzeugst ein Array der Länge 0 als erstes, du willst aber sicher ein Array haben, dem du immer einen neuen "user" hinzufügst.
    mit vector sieht das so aus:

    #include <string>
    #include <iostream>
    
    using namespace std;
    
    class user {
          private: int id;
                   string name;
                   string pass;
    
          public:  user(int theid, string thename, string thepass) {
                        id = theid;
                        name = thename;
                        pass = thepass;
                   }
    };
    
    int main() {
    
        int key;
        int userid = 0;
    
        vector<user> theuser;
    
        while(key != 2) {
            system("cls");
            cout<<"#1 >> Login\n";
            cout<<"#2 >> New User\n\n";
            cin>>key;
        }
    
        if(key == 2) {
               system("cls");
               string loginname,loginpass;
               cout<<"Name: ";cin>>loginname;cout<<"\n";
               cout<<"Password: ";cin>>loginpass;cout<<"\n";
               user myuser(userid, loginname, loginpass);
               theuser.push_back(myuser);
               ++userid;
        }     
        cout<<"\n";system("pause");   
    }
    

Anmelden zum Antworten