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 eingebenif(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...