C++ 输入时显示*(隐藏/屏蔽输入)

C++ 输入时显示*(隐藏/屏蔽输入),c++,windows,masking,C++,Windows,Masking,我正在获取密码作为输入。 我已经看过了各种示例,但它们要么使用while循环,要么使用SETCONSOLE方法。两人都有问题。 在我输入字符之前实现while循环打印1*。另一种方法是在我打字时使用echo隐藏字符,而我想打印。如果能帮助我使用SETCONSOLE方法用*屏蔽输入,我将不胜感激。我将不胜感激。代码已附加 void signup(){ gotoxy(10, 10); string n, p1,p2; cout << "Enter your u

我正在获取密码作为输入。 我已经看过了各种示例,但它们要么使用while循环,要么使用SETCONSOLE方法。两人都有问题。 在我输入字符之前实现while循环打印1*。另一种方法是在我打字时使用echo隐藏字符,而我想打印。如果能帮助我使用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;
}
void注册(){
gotoxy(10,10);
字符串n、p1、p2;
cout n;
lp:
gotoxy(10,11);

您可能想使用
getch()
#include
)读取一个字符,而不是它的屏幕上的回音。然后当你确认它是一个你想要接受的字符时,你可以在正确的位置打印出一个<代码> */Cube。

< p>这里使用一个简单的例子,使用代码> GETCH < /C>。是的,它是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;  
}
#包括
#包括
#包括
使用名称空间std;
int main(){
字符串res;
字符c;

请指定您的目标操作系统,并提供您已经尝试过的操作系统的简短代码片段。SETCONSOLE方法是什么?@Raw N DWORD mode;HANDLE hConIn=GetStdHandle(STD_INPUT_HANDLE);GetConsoleMode(hConIn,&mode);mode=on?(mode | ENABLE_ECHO_INPUT):(mode&~(ENABLE_ECHO_INPUT));SetConsoleMode(hConIn,mode);虽然如果密码不匹配,我必须在循环之前使用clear()清除字符串,但它确实解决了问题。谢谢:)尽管另一种方法(如果解释过的话)也会有帮助:)它只是简化了密码输入,您可以将它放在一些
getpassword
方法中,并为每个密码输入调用它。