brauche hilfe bei einem Programm



  • Habe ein Programm geschrieben, welches eine Registrierung simulieren soll, aber aus unerklärlichen Gründen kommt es nicht bis zum Ende. Brauche dringend Hilfe
    [cpp]
    #include<iostream>
    #include<cstring>
    #include<string>

    using namespace std;

    class Gustav{
    bool gustav1;
    string benutzernametest[1];

    string benutzername;
    int passwort;
    public:
    bool test(int index);
    void benutzer_eingabe();
    bool passwort_eingabe();
    void init_benutzer();

    }gustav;

    void Gustav :: init_benutzer(){
    benutzernametest[0]="Gustav";
    }

    bool Gustav :: test(int index){
    for(int i=0;i<index;++i){
    if(benutzername==benutzernametest[i]){
    cout<<"Erfolg";

    return true;

    }

    else{return false;}}

    }

    void Gustav :: benutzer_eingabe(){
    init_benutzer();
    cout<<"\nGeben Sie ihren Benutzer ein.";
    cin>>benutzername;

    }

    bool Gustav :: passwort_eingabe(){

    cout<<"\nGeben Sie das Passwort ein\n";
    cin>>passwort;
    if(passwort==123){
    cout<<"\nEinloggen erfolgreich";

    return true;
    }
    else{
    cout<<"\nPasswort falsch\n";

    passwort=0;
    return false;
    }
    exit(1);
    }

    int main(){

    do{
    gustav.benutzer_eingabe();
    gustav.test(1);
    }while(gustav.test(1)==false);
    do{gustav.passwort_eingabe();
    }while(gustav.passwort_eingabe()==false);
    cout<<"Ende";
    return 0;
    }

    Danke im voraus.



  • Hi, habe mir deinen Code jetzt nicht so genau angesehen und habe auch nicht nach dem Fehler gesucht,
    weil ich dein Konzept nicht wirklich passend für eine Registrierung finde.

    Würde das eher so machen:

    Eine Klasse für die Benutzer

    #pragma once
    #include <string>
    using namespace std;
    
    class user
    {
    private:
    	string userName;
    	string userPass;
    public:
    	user(void){userName = ""; userPass="";}
    	user(string userName, string userPass){
    		this->userName = userName; 
    		this->userPass = userPass;
    	}
    	~user(void);
    
    	void setUserName(string userName){this->userName = userName;}
    	string getUserName(void){return userName;}
    
    	void setUserPass(string userPass){this->userPass = userPass;}
    	string getUserPass(void){return userPass;}
    };
    

    und eine Datenbank Klasse in der alle Benutzer sind

    #pragma once
    #include "user.h"
    #include <vector>
    #include <string>
    #include <iostream>
    using namespace std;
    
    class database
    {
    private:
    	vector<user*> users;
    public:
    	database(void);
    	~database(void);
    
    	void addUser(user* user){
    		users.push_back(user);
    	}
    	bool login(){
    		string userName, userPass;
    
    		cout<<"Benutzername eingeben: ";
    		cin>>userName;
    		cout<<"Passwort eingeben: ";
    		cin>>userPass;
    
    		for(unsigned int i=0;i<users.size();i++){
    			if(users[i]->getUserName() == userName && users[i]->getUserPass() == userPass){
    				cout<<users[i]->getUserName()<<" wurde erfolgreich eingeloggt"<<endl;
    				return true;
    			}
    		}
    		cout<<"Falscher Benutzername oder falsches Passwort"<<endl;
    		return false;
    	}
    };
    

    Und dann noch die Main

    #include "user.h"
    #include "database.h"
    
    int main(void){
    
    	//Datenbank anlegen
    	database* myDatabase = new database();
    
    	//User anlegen
    	user* myUser; 
    	myUser = new user("Gustav","1234");
    	myDatabase->addUser(myUser);
    	myUser = new user("Peter","5678");
    	myDatabase->addUser(myUser);
    	myUser = new user("Hans","4321");
    	myDatabase->addUser(myUser);
    
    	//Einloggen
    	while (!myDatabase->login()){}
    
    	system("pause");
    
    	return 1;
    }
    

    Hab hier jetzt mal alles Inline gemacht um den Code ein bißchen zu verkürzen.
    Kannst du ja dann bei dir anders machen. Auch die Benutzereingabe solltest du
    dann vielleicht aus der Datenbank Klasse nehmen, aber ich wollte dir ja auch nur
    ungefähr zeigen wie du sowas machen könntest, soll ja keine Musterlösung sein.

    Hoffe das hilft dir ein bißchen.

    Gruß smilingman



  • @Threadersteller:
    Habe mir Deinen Code auch nur ganz kurz angesehen, aber ich sehe zumindest, daß init_benutzer() nicht aufgerufen wird.



  • Stimmt, aber nicht nur init_benutzer() wird nicht aufgerufen, es wird auch keine Instanz
    der Klasse Gustav erstellt.

    Main müsste eher so aussehen:

    int main(){
       Gustav gustav;
       gustav.init_Benutzer();
    
       do{ 
          gustav.benutzer_eingabe(); 
          gustav.test(1); 
       }while(gustav.test(1)==false);
    
       do{
          gustav.passwort_eingabe(); 
       }while(gustav.passwort_eingabe()==false);
    
       cout<<"Ende"; 
       return 0; 
    }
    

    Finde diese Lösung aber trotzdem nicht wirklich elegant, schau dir lieber
    meinen Code oben mal an.

    Gruß smilingman



  • smilingman schrieb:

    Stimmt, aber nicht nur init_benutzer() wird nicht aufgerufen, es wird auch keine Instanz
    der Klasse Gustav erstellt.

    Da war ich mir ehrlich gesagt nicht sicher, ob das nicht an dieser Stelle passiert:

    class Gustav{
    
    [...]
    
    }gustav;   // <---------
    

    weil TE ja schrieb, das Programm komme nicht zum Ende. Ohne Instanz sollte es gar nicht erst kompiliert werden.



  • oh, ok das hatte ich total übersehen.


Anmelden zum Antworten