Показать * во время ввода (Скрыть / Маскировать ввод)

Я нахожусь в процессе получения пароль в качестве ввода.
Я рассмотрел различные примеры, но они либо использовали цикл while, либо метод SETCONSOLE. У обоих были проблемы.
Реализация цикла while напечатана на 1 *, прежде чем я даже введу символ. Другой метод использовал эхо для СКРЫВАТЬ символы, пока я печатал, тогда как я хочу быть напечатанным. Я был бы признателен за помощь в маскировании ввода с помощью * метода SETCONSOLE. Я был бы очень признателен. Код прилагается!

 void signup(){
gotoxy(10, 10);
string n, p1,p2;
cout << "Enter your username: " << endl; // TEST if username already       exists
gotoxy(31, 10);
cin >> n;
lp:
gotoxy(10, 11);
cout << "Enter your password: " << endl; // TEST if username already exists
gotoxy(31, 11);

getline(cin, p1);
system("cls");
gotoxy(10, 10);
cout << "Re-Enter your password to confirm: " << endl; // TEST if username already exists
gotoxy(45, 10);
getline(cin, p2);if (p2!=p1)
{
system("cls");
gotoxy(10, 10);
cout << "Passwords donot match! Please enter again!";
goto lp;
}

}

1

Решение

Вот простой пример использования getch, ДА это метод c, а не c ++, но он очень эффективен.

Он может быть расширен до блоков, вкладок и т. Д.

Также смотрите комментарии в коде …

#include <iostream>
#include <string>
#include<conio.h>
using namespace std;int main(){
string res;
char c;
cout<<"enter password:";
do{
c = getch();
switch(c){
case 0://special keys. like: arrows, f1-12 etc.
getch();//just ignore also the next character.
break;
case 13://enter
cout<<endl;
break;
case 8://backspace
if(res.length()>0){
res.erase(res.end()-1); //remove last character from string
cout<<c<<' '<<c;//go back, write space over the character and back again.
}
break;
default://regular ascii
res += c;//add to string
cout<<'*';//print `*`
break;
}
}while(c!=13);
//print result:
cout<<res<<endl;
return 0;
}
2

Другие решения

Вы, вероятно, хотите использовать getch() (#include <conio.h>) читать символ, не отражая его на экране. Затем, когда вы подтвердите, что этот символ вы хотите принять, вы можете распечатать * в правильном положении.

1

По вопросам рекламы [email protected]