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.