Eingabe ersetzen mit *



  • Hallo,

    ich würde gerne eine Funktion schreiben, die nach einander mit getch(); die eingabe in ein Datenfeld schreibt und dann nach jedem Buchstabe cout << "*" ausgibt. Sowit kein Problem!

    Wenn ich jetzt das Passwort eingebe sehe ich nur ein "*". Aber wie kann ich nun die for()-Schleife beenden? eig. ja wenn die Eingabe ein "Enter" war, aber wie mache ich das?

    std::string funcs::get_password(std::string &typed_password) {
    	std::vector<char> c;
    	char zeichen;
    
    	for(int i = 0; i < 20; i++){
    		zeichen = getch();
    		cout << "*";
    		c.push_back(zeichen);
    		cout << c[i];
    	}
    
    	typed_password = "hallo";
    	return typed_password;
    }
    

    Danke schonmal,
    hmstr



  • Du kannst einfach prüfen, ob die Eingabe ein "Enter" war. Also einfach:

    if('\t')
    ...
    

    Siehe auch hier: http://de.wikipedia.org/wiki/Steuerzeichen



  • Die Escapesequenz \t steht für Tabulator und nicht für Enter. Der ASCII-Code für Enter lautet 0x0d.

    Ich denke mal, so dürfte es nicht schlecht sein:

    #include <iostream>
    #include <conio.h>
    #include <string>
    std::string get_password(unsigned int max_len){
    	std::string pw("");
    	unsigned int pw_len=0;
    	char buf=0;
    	while(buf!='\r'){
    		while(!kbhit());
    		buf=getch();
    		if((pw_len<max_len)&&((buf>='A' && buf<='Z') || (buf>='a' && buf<='z') || (buf>='0' && buf<='9') || buf=='_')){
    			pw+=buf;
    			std::cout<<"*";
    			++pw_len;
    		}
    	}
    	return pw;
    }
    


  • goto anywhere; schrieb:

    Die Escapesequenz \t steht für Tabulator und nicht für Enter. Der ASCII-Code für Enter lautet 0x0d.

    Mist. -.- '\r' wäre es natürlich.. 🙂



  • habe es jetzt so gelöst:

    td::string funcs::get_password(std::string &typed_password) {
    	char zeichen = 'a';
    
    	while(zeichen != '\r'){
    		zeichen = getch();
    		if(zeichen != '\r'){
    			cout << "*";
    			typed_password += zeichen;
    		}
    	}
    	cout << "\n";
    
    	return typed_password;
    }
    

    danke an euch 😉 🙂



  • hmstr schrieb:

    ...
    	char zeichen = 'a';
    
    	while(zeichen != '\r'){
    		zeichen = getch();
    		if(zeichen != '\r'){
    			cout << "*";
    			typed_password += zeichen;
    		}
    	}
    

    Hier böte sich doch mal sehr eine do-while-Schleife an 😉


Anmelden zum Antworten