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
