cin.get(j) wieso nicht?



  • Hallo miteinander

    ich habe eine Frage an euch und zwar funktioniert cin.get() nicht weiss auch nicht wieso! Ich bitte um Hilfe!!!!!!

    // -----------------------------------------------------
    // Passw1.cpp
    // Definition der Funktionen getPassword() und zeitdiff()
    // zum Einlesen und Überprüfen eines Passwortes.
    // -----------------------------------------------------
    #include <iostream>
    #include <iomanip>
    #include <string>
    #include <ctime>
    
    using namespace std;
    
    long zeitdiff(void);                      // Prototyp
    static string geheimwort;        // Passwort 
    static long  maxanzahl = 3, maxzeit = 60; // Limits
    
    bool changePassword()  // Passwort einlesen und überprüfen.
    {               // Return-Wert: true, falls Passwort ok.
       bool ok_flag = false;        // Für die Rückgabe
       bool answer = false;
       string wort;                 // Für die Eingabe 
       int anzahl = 0, zeit = 0;
    
       while(answer != true)
       {
    	   cout << "\nGeben Sie, das zu änderne Passwort ein: ";
    	   //cin.sync();
    	   cin >> setw(20) >> geheimwort;
    
    	   cout << "\nSind sie mit der Passwort einverstanden? ";
    	   char j;
    	   cin >> j; //mit cin.get(j) geht nicht wieso?
    	   if( j == 'J' || j == 'j')
    	   {
    		   answer = true;
    		   cout << "Das Passwort wurde erfolgreich geändert!" << endl;
    		   cout << geheimwort << endl;
    	   }
    
       }
    
       zeitdiff();                   // Die Stoppuhr 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 ungültig!" << endl;
          else 
             ok_flag = true;         // Erlaubnis geben
        }
        return ok_flag;              // Ergebnis
    }
    
    long zeitdiff()          // Liefert die Anzahl Sekunden
    {                        // seit dem letzten Aufruf.
        static time_t  sek = 0;    // Zeit vom letzten Aufruf.
        time_t  altsek = sek;      // Alte Zeit merken.
        time (&sek);             // Neue Zeit lesen.
        return (sek - altsek);   // Differenz zurückgeben.
    }
    
    int main()
    {
        if( !changePassword())
            cout << "Account ist leider gesperrt!" << endl;
        else
            cout << "Richtig!" << endl;
    
    	system("Pause");
    
        return 0;
    }
    


  • Gegenfrage: Wie äußert sich dieses "geht nicht"?



  • cin.get( )

    ist für unformatierten Input gedacht. Da werden auch keine Whitespaces überlesen - was du wohl aber erwartest.

    Lies einen std::string ein und prüfe ob er nur ein Zeichen hat. Danach kannst du dieses eine Zeichen überprüfen.



  • CStoll schrieb:

    Gegenfrage: Wie äußert sich dieses "geht nicht"?

    cin >> j; //mit cin.get(j) geht nicht wieso?
    

    ich kann mit cin.get(j) nichts eingeben, dass meine ich



  • Wie N4C3R sagte, überliest cin.get() keine Whitespaces, die noch im Tastaturpuffer zurückgeblieben sein könnten, sondern liefert das nächste Zeichen aus dem Puffer. Und das ist das Enter, das du am Ende der Eingabe "cin >> setw(20) >> geheimwort;" eingetippt hast.


Anmelden zum Antworten