Darstellung eines Textes (string, oder Char-Array) durch Sterne



  • Hi,
    würde gerne bei einer Passwortkontrolle, das eingegebene PW in Sternen darstellen. Eine Idee hätte ich ja, dies zu verwirklichen:
    Eine Mehrfachauswahl, die jedes Zeichen durch einen Stern ersetzt und so ausgibt und mit Goto genau über dem bisherigen Zeichen. Aber das ist ziemlich umständlich. Da gibts doch bestimmt eine bessere Möglichkeit, die ich mit meinen Kenntnissen nachvollziehen kann.
    Hier mal meine PW-Abfrage:

    void PWAbfrage()
    {
    	string Benutzer[2] = {"Admin", "User"};		// Festlegung zweier Benutzernamen und
    	string Passwort[2] = {"Passwort", "PW"};	// zwei Passwörter, müssen ggf. 
    												// nur hier geändert werden
    
    	string BenName;								// Deklaration der Eingabevariablen
    	string PW;									// für Benutzername und Passwort
    
    	do											// Schleife: läuft solange die 
    	{											// Benutzerdaten falsch sind
    		system("cls");
    		cout << "\n\tLogin:";
    		cout << "\n\t~~~~~~";
    		cout << "\n\nBenutzername:\t";
    		cin >> BenName;							// Eingabe des Benutzernamens
    		cout << "\n\nPasswort:\t";	
    		cin >> PW;								// Eingabe des Passwortes
    		if ((BenName == Benutzer[0]) && (PW == Passwort[0]) ||	// Vergleich, ob
    			(BenName == Benutzer[1]) && (PW == Passwort[1]))	// Daten übereinstimmen
    			{	Menu();
    			}									// Aufruf des Menus
    				else							// Andernfalls Fehlermeldung
    				{	cout << "\a\n\n\tIhre Eingaben waren falsch! Bitte probieren"; 
    					cout << " Sie es erneut!";
    					getch();
    				}
    	}	while ((BenName != Benutzer[0]) || (PW != Passwort[0]) &&
    		(BenName != Benutzer[1]) || (PW != Passwort[1]));
    
    }
    


  • Mit Ansi C++ kannst du nicht kontrollieren, was die Konsole macht. Aber je nach Betriebssystem solltest du mal nach Funktionen suchen, die ohne Bildschirmecho einlesen:

    string data="";char c;
    while(!isspace(c=getzeichen())
    {
      cout<<'*';
      data.push_back(c);
    }
    

    (gibt für jedes eingegebene Zeichen ein * aus - getzeichen() mußt du suchen oder selber schreiben, isspace() gibt's in der <ctpye>)


Anmelden zum Antworten