Passwortabfrage Problem



  • Ich habe mit folgendem Quelltext ein Problem(ja, ich habe den Quelltext aus einem Buch, aber verändert):

    #include <iostream>
    #include <iomanip>
    #include <string>
    #include <cctype>
    using namespace std; 
    
    bool getPassword(void);                           // Passwort einlesen .
    bool changePassword(void);                        // Passwort ändern.
    
    void bye()
    {
    	exit(0);                                      // Programm beenden
    }
    
    inline void cls()
    {
       cout << "\n";                                 // Falls die ANSI-Steuerzeichen nicht
    }                                                // vefügbar sind: nur New-Lines ausgeben.
    
    inline void weiter()
    {
       cout << "\n\nWeiter mit der Return-Taste! ";
       cin.sync();  cin.clear();                      // Nur neue Eingabe
       while( cin.get() != '\n')
           ;
    }
    
    inline char getYesOrNo()                          // Zeichen J oder N einlesen  
    {
       char c = 0;
       cin.sync();  cin.clear();                     // Nur neue Eingabe
       do
       {
         cin.get(c);
         c = toupper(c);                             // Auch Kleinbuchstaben zulassen.
       }
       while( c != 'J'  && c != 'N');
       return c; 
    }
    
    static string header =
    "\n\n      ****  Eingabe  ****\n\n";
    
    static string menu =
    "\n\n              P = Gesicherter Bereich"      //Eingabe Aufforrderung
    "\n\n              T = Temeraturanzeige"
    "\n\n                = Platzhalter"
    "\n\n              B = Beenden"
    "\n\n Ihre Wahl:   ";
    
    int main()
    {
       char wahl = 0;
    
       while( wahl != 'B')
       {
         cls();
         cout << header << menu;
    
         cin.get(wahl);   wahl = toupper(wahl);
    
         cls();
         cout << header << endl;
    
    	 switch( wahl)
         {
           case 'T':
             {
                cout << "Temperatur: ???" << endl;
                bye();
             }
    	 }
    
         switch( wahl)
         {
           case 'P':
             if( !getPassword() )
             {
                cout << "Keine Berechtigung!" << endl;
                weiter();
             }
             else
             {
                cout << "Herzlich willkommen!\n\n"
                     << "Wollen Sie das Passwort aendern? (j/n)";
                if( getYesOrNo() == 'J')
                {
                  if( changePassword() )
                    cout << "Passwort geaendert!" << endl;
                  else 
                    cout << "Passwort unveraendert!" << endl;
                  weiter();
                }
    
                cout << "Keine Ahnung was hier passieren soll!" << endl;
                bye();
             }
             break;
    
           case 'E':
             cls();  cout << "\n    Bye Bye!" << endl;
    		 bye();
         }
       } // Ende while
    
       return 0;
    }
    

    Der Code verweißt auf einen anderen Quellcode:

    #include <iostream>
    #include <iomanip>
    #include <string>
    #include <ctime>
    using namespace std;
    
    long zeitdiff(void);                      // Prototyp
    static string geheimwort = "testopmat";        // Passwort 
    static long  maxanzahl = 3, maxzeit = 20; // Limits
    
    static long zeitdiff(void);
    
    bool getPassword()  // Passwort einlesen und überprüfen.
    {               // Return-Wert: true, falls Passwort ok.
       bool ok_flag = false;         // Für die Rückgabe 
       string wort;                  // Für die Eingabe 
       int anzahl = 0, zeit = 0;
    
       zeitdiff();                   // Die Stopuhr starten
       while( ok_flag != true && 
              ++anzahl <= maxanzahl) // Anzahl Versuche 
       {
          cout << "\n\nGeben Sie das Passwort ein:  ";
          cin.sync();                // Keine alte Eingabe
          cin >> setw(20) >> wort;
          zeit += zeitdiff();
          if( zeit >= maxzeit )      // Im Zeitlimit?
             break;                  // nein!
          if( wort != geheimwort)
             cout << "Passwort ungueltig!" << endl;
          else 
             ok_flag = true;         // Erlaubnis geben
        }
        return ok_flag;              // Ergebnis
    }
    
    // Lokale Hilfsfunktion zeitdiff() --> static definieren
    static long zeitdiff()   // Liefert die Anzahl Sekunden
    {                        // seit dem letzten Aufruf.
        static long  sek = 0;    // Zeit vom letzten Aufruf.
        long  altsek = sek;      // Alte Zeit merken.
        time( &sek);             // Neue Zeit lesen.
        return (sek - altsek);   // Differenz zurückgeben.
    }
    
    bool changePassword()    // Passwort ändern.
    {                        // Return-Wert: true, 
                             // falls neues Passwort geändert.
       string wort1,wort2;          // Für die Eingabe 
    
       // Neues Passwort einlesen
    
       cout << "\nNeues Passwort eingeben (2 bis 20 Zeichen): ";
       cin.sync();                  // Keine alte Eingabe
       cin >> setw(20) >> wort1;
    
       if( wort1.size() > 1)
       {
          cout << "\nPasswort nochmal eingeben: ";
          cin >> setw(20) >> wort2;
          if( wort1 == wort2)       // Passwort bestätigt?
          {                         // Ja! 
              geheimwort = wort1;
              return true;
          }
       }
       return false;                // kein neues Paswort
    }
    

    Das Problem:
    Ich möchte bei der Eingabe des Passwortes gerne Sternchen haben.
    Ich habe hier auch mich umgeguckt konnte aber keinen richtigen Sinn herauszaubern(Aus den Quellcodes).

    Danke im voraus.



  • Vielleicht findest du im richten Unterforum ja eine Lösung.



  • Dieser Thread wurde von Moderator/in estartu aus dem Forum MFC (Visual C++) in das Forum DOS und Win32-Konsole verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Hilft mir aber eigentlich nicht so viel 😞
    Bin Anfänger

    #include <iostream> 
    #include <string> 
    #include <conio.h> 
    
    std::string read_pw ( unsigned short int Maxlength , char Ersatz = '*' ) 
    { 
        std::string pw; 
        char now ( '\0' ); 
    
        while ( ( Maxlength-- > 0 ) && ( now != 13 ) && ( now != 10 ) ) 
        { 
            /* Zeichen einlesen */ 
            now = getch (); 
            /* Bei Sonderzeichen zweites Zeichen ignorieren */ 
            if ( now == 0 || now == 0x0E ) 
            { 
                getch (); 
            } 
            /* Backspace abfangen */ 
            else if ( now == 8 ) 
            { 
                pw.erase ( pw.end() - 1 , 1 ); 
                cout << "\b \b"; 
            } 
            /* Wenn Zeichen normal dann an das Passwort anhängen */ 
            else 
            { 
                pw = pw + now; 
                cout << Ersatz; 
            } 
        } 
    
        return ( pw ); 
    }
    

    Wie muss ich das einfügen?



  • huhu,

    den code hab ich jetzt mal nicht gelesen, aber ein weg wäre zB:
    soweit ich weiss liefert getch() keine Bildschirmausgabe dh
    du kannst für jedes getch (also jedes eingelesene zeichen) ein Sternchen auf dem Bildschirm ausgeben
    cout << "*";

    hiflts?
    mfg



  • Jermuk schrieb:

    Hilft mir aber eigentlich nicht so viel 😞
    Bin Anfänger

    .
    .
    .
    

    Wie muss ich das einfügen?



  • while ( ( Maxlength-- > 0 ) && ( now != 13 ) && ( now != 10 ) )
        {
            /* Zeichen einlesen */
            now = getch (); 
            cout << "*";
            .
            .
            .
    


  • Versuch mal folgenden Code:

    [cpp]
    #include <iosream>
    #include <windows.h>
    #include <string>
    using namespace std;

    int main()
    {
    string passwort;

    cout << "Passwort:";
    cin >> passwort; //Passwort eingeben

    if(passwort=="Passwort")
    {
    system("cls");
    cout << "Login OK!" << endl;
    //void funktion();
    //system("PAUSE");
    }
    else
    {
    system("cls");
    cout << "Login failed" << endl;
    system("cls");
    }
    return 0;
    }



  • C++ler schrieb:

    Versuch mal folgenden Code:

    blub...
    

    😕


Anmelden zum Antworten