c ++

时间:2016-02-09 17:41:47

标签: c++ visual-c++ terminal

我想在c ++中实现一个登录表单,所以我写了一个函数如下:

string setPass(bool show_asterisk = true)
{
    const char BACKSPACE = 8;//ASCII code for BACKSPACE Key
    const char ENTER = 13;//ASCII code for ENTER Key
    string pass = " ";//initialize string
    char c = ' ';//initialize character 

    while ((c = _getch()) != ENTER)
    {
        if (c == BACKSPACE)
        {
            if (pass.length() != 0)
            {
                if (show_asterisk)
                   cout << "\b \b";
                pass.resize(pass.length() - 1); //resize the length of pass 
            }
        }
        else if (c == 0 || c == 224)//when player press esc key
        {
            _getch();
            continue;
        }
        else
        {
            pass.push_back(c);
            cout << '*';
        }
    }
    cout << endl;
    return pass;
}

以下是执行该功能的代码:

cout << "==================" << endl;
cout << "      login       " << endl;
cout << "  ID:";
cin >> id;
cout << "  Password:";
cin >> pwd;
pwd = setPass();

我编译了这段代码,但似乎功能不起作用,因为密码没有被屏蔽。这是一张显示发生情况的图片:

enter image description here

我试图解决问题,但我无法弄明白。

1 个答案:

答案 0 :(得分:1)

我不知道你如何比较密码。但是,您正使用pass初始化setPass()函数中的= " ";字符串。请注意,该函数始终返回使用无用的空格字符开始的密码。

Enter password: ****
Output: " asdf"

其次,我在这部分中没有看到cin的任何目的:

cin >> pwd;
pwd = setPass();

我修复了我在这里提到的这些东西,编译了代码,它可以按你的需要工作。