prog für password funztz i-wie nich



  • Hey

    ich habe ein prog geschrieben,das ein passwort nach eingabe speichern soll und beim ändern das alte abfragen soll,aber leider funktioniert das nicht.
    das programm erkennt i.wie nicht, dass schon ein passwort eingegeben wurde. 😕
    kann mir einer helfen??

    Quelltext:

    #include <iostream>

    using namespace std;
    class Password{

    private:
    string currentPw;
    static int counter;

    public:
    void setPw(string);
    string getPw();
    };

    int Password::counter = 0;

    int main()
    {
    void run();
    run();

    std::cin.get();
    }

    void run(){

    Password password;
    string newPw;

    cout<<"altes Passwort: "<<password.getPw()<<endl;
    cout<<"Bitte das neue Passwort eingeben\n";
    cin>>newPw;

    password.setPw(newPw);

    std::cin.get();

    }

    void Password::setPw(string newPw){

    if(currentPw!=""){

    string eingabe;
    cout<<"Bitte das alte Passwort eingeben"<<endl;
    cin>>eingabe;

    std::cin.get();

    if(eingabe ==currentPw){

    currentPw = newPw;
    cout<<"Passwort geändert";

    std::cin.get();

    }else if(counter<3){

    counter++;
    cout<<"Falsches Passwort \nSie haben noch "<<3-counter<<" Versuche"<<endl;

    cout<<"Bitte das neue Passwort eingeben\n";
    cin>>newPw;

    run();

    std::cin.get();

    }else{
    cout<<"Programm gesperrt\n";

    std::cin.get();
    }

    }else{

    currentPw = newPw;

    run();

    std::cin.get();

    }
    }

    string Password::getPw(){
    return currentPw;
    }



  • Benutze die C/C++ Code Tags des Forums.
    Simon



  • Wo kann ich die finden??



  • Einfach ein <cpp></cpp> um den Code herum, natürlich mit eckigen statt spitzen Klammern.



  • #include <iostream>
    
    using namespace std;
    class Password{
    
    private:
    string currentPw;
    static int counter;
    
    public:
    void setPw(string);
    string getPw();
    };
    
    int Password::counter = 0;
    
    int main()
    {
    void run();
    run();
    
    std::cin.get();
    }
    
    void run(){
    
    Password password;
    string newPw;
    
    cout<<"altes Passwort: "<<password.getPw()<<endl;
    cout<<"Bitte das neue Passwort eingeben\n";
    cin>>newPw;
    
    password.setPw(newPw);
    
    std::cin.get();
    
    }
    
    void Password::setPw(string newPw){
    
    if(currentPw!=""){
    
    string eingabe;
    cout<<"Bitte das alte Passwort eingeben"<<endl;
    cin>>eingabe;
    
    std::cin.get();
    
    if(eingabe ==currentPw){
    
    currentPw = newPw;
    cout<<"Passwort geändert";
    
    std::cin.get();
    
    }else if(counter<3){
    
    counter++;
    cout<<"Falsches Passwort \nSie haben noch "<<3-counter<<" Versuche"<<endl;
    
    cout<<"Bitte das neue Passwort eingeben\n";
    cin>>newPw;
    
    run();
    
    std::cin.get();
    
    }else{
    cout<<"Programm gesperrt\n";
    
    std::cin.get();
    }
    
    }else{
    
    currentPw = newPw;
    
    run();
    
    std::cin.get();
    
    }
    }
    
    string Password::getPw(){
    return currentPw;
    }
    


  • schaich schrieb:

    ...
    int main()
    {
    void run();
    run();
    ...
    

    ähhh - das hat Dir bestimmt der Compiler angemahnt. Also mal in die Warnings sehen ....

    Tipp: "void run();" ist da falsch und braucht's nicht...

    Gruß,

    Simon2.

    P.S.: Mit Codeeinrückungen sehen nicht nur wir, sondern auch Du besser, was los ist. 😉 (sind aber vermutlich TABs, die beim Copy/Paste hierhin verloren gegangen sind)



  • ja ich hab nur keinen anderen namen gefunden...
    Oder was meinst du??



  • ist auch keine warnung...



  • void run();
    
    int main()
    {
       run();
    
       std::cin.get();
    }
    


  • Achso.
    Macht aber keinen Unterschied.

    schaich



  • schaich schrieb:

    ja ich hab nur keinen anderen namen gefunden...
    Oder was meinst du??

    Wie der Namenskollege schon andeutete: Am "Namen" liegt's nicht.
    Du definierst Dir da eine Variable namens "run" und die rufst Du in main() auf ... nicht "die run()", die Du außen definiert hast.

    Gruß,

    Simon2.



  • 1. Inkludier <string>
    2. Schreibe in der main routine ein return statement.

    Dann sollte es wenigstens kompilieren.

    Gruss Simon



  • alles wie gehabt....
    der merkt immernoch nicht dass ich ein passwort eingegeben hab...

    schaich



  • ja, aber vorher hats doch gar nicht korrekt kompiliert.
    auf jedenfalls kannst du jetzt debuggen. dann findest du den fehler bestimmt.



  • Das ist auch eine endloss rekursion. 😉

    EDIT:

    void Password::setPw(string newPw){
    
    if(currentPw!="")
    {
        // hier kommt er nie an
    


  • Ich wollte nur mal anmerken dass eine lokale Funktionsdeklaration sowie ein fehlendes return in main in C++ vollkommen legal sind.



  • @LordJaxom
    Ok, danke. Das fehlende return in in main generiert allerdings eine warning (vc++6.0). ev. ist das bei neueren kompilern nicht mehr der fall.



  • simon.gysi schrieb:

    vc++6.0

    ... generiert noch deutlich mehr Probleme. Sofern man nicht gezwungen ist vc++ 6.0 zu verwenden sollte man davon (u.a. wegen fehlernder Standardkonformität) eh gewaltigen Abstand nehmen.



  • Anmerkung schrieb:

    simon.gysi schrieb:

    vc++6.0

    ... generiert noch deutlich mehr Probleme. Sofern man nicht gezwungen ist vc++ 6.0 zu verwenden sollte man davon (u.a. wegen fehlernder Standardkonformität) eh gewaltigen Abstand nehmen.

    Danke für den Hinweis. Leider bin ich beim momentanen Projekt gezwungen. Ansonsten sind mit konformere und komfortablere IDE / Compiler auch lieber.



  • Wie kann ich denn Abfragen, ob ein Strin quasi leer ist also kein Zeichen hat??
    MfG schaich


Anmelden zum Antworten