如何删除密码掩码c ++中的字符

时间:2014-08-03 06:24:03

标签: c++

我正在为我的项目制作一个登录表单,但我不能继续这个。我希望我的程序在按下退格按钮时删除一个字符(密码),但程序没有读取它。

这是我的代码

string username, password, power;
char ast=' ';
int aste = 0, accessLevel;
ofstream addAcc;
addAcc.open("Accounts.txt");
cout<<"Username: ";cin.ignore();getline(cin, username);
cout<<"Password:  ";
do
{
    ast = getch();

    if (ast == 13 || ast == ' ' )
    {
        break;
    }
    if(ast==8 || password!="")
    {
        cout<<"\b \b";
        password.erase(password.size()-1);
    }
    cout<<"*";
    password+=ast;
    aste ++;
}while(ast!=13 || ast!=' ');
do
{
    cout<<"Enter Access Level(0-1):  ";cin>>accessLevel;
    switch(accessLevel)
    {
        case 0:
            {
                power = "Cashier";
                break;
            }
        case 1:
            {
                power = "Manager";
                break;
            }
        default: 
            cout<<"Invalid access level."<<endl;
    }
}while(accessLevel>1||accessLevel<0);

感谢那些愿意帮助的人。

3 个答案:

答案 0 :(得分:2)

在某些平台上getch()将在您按BACKSPACE时返回DEL字符(ascii 127)。所以改变你的行

if(ast==8 || password!="")

if((ast==8 || ast==127) && !password.empty())

每次password也不是空字符串时,您可能不想删除字符,因此我也从条件中删除了|| password!=""。相反,如果密码不为空,则只想删除一个 字符。因此,您需要&&而不是||

另请注意,您正无条件地添加getch()返回的字符。因此,如果用户输入BACKSPACE,则删除最后一个字符,但将BACKSPACE附加到密码。所以你应该只追加getch()返回的字符,如果它不是BACKSPACE(或DEL)。

因此,您的代码可能如下所示:

if((ast==8 || ast==127) && !password.empty())
{
    cout<<"\b \b";
    password.erase(password.size()-1);
    aste--;
}
else
{
    password+=ast;
    cout<<"*";
    aste++;
}

答案 1 :(得分:0)

DO         {             c = _getch();

        if (c == 13 || c == ' ') // checking ascii key 13 pressed or no
        {
            break;
        }
        if (c == 8 || c == 127)
        {
            if (Password.size() != 0){
                cout << "\b \b";
                Password.erase(Password.size() - 1);
                StarNum--;
            }

        }
        else {
            Password += c;
            cout << "*";
            StarNum++;
        }
    } while (c != 13 || c != ' ');

答案 2 :(得分:-1)

使用

#include <conio.h>

ch = _getch();

而不是ch = getch();

并且还改变了这样的条件

if(ch == 8)
{
    password.erase(password.size()-1);
    aste--;
}else
{
    password +=ch;
    aste++;
}