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

时间:2015-04-22 22:26:41

标签: c++ windows masking

我正在将密码作为输入。 我已经通过各种示例,但他们使用while循环或SETCONSOLE方法。两者都有问题。 在我输入字符之前实现while循环打印1 *。我键入的另一种方法是回显 HIDE 字符,而我想要打印。我很感激帮助我用*使用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;
}

}

2 个答案:

答案 0 :(得分:2)

这是一个使用getch的简单示例。是的,它是方法,而不是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;  
}

答案 1 :(得分:1)

您可能希望使用getch()#include <conio.h>)来读取字符,而不会将其回显到屏幕上。然后,当您确认自己想要接受的字符时,可以在正确的位置打印*