如何避免在push_back中使用Backspace字符?

时间:2014-03-28 20:05:20

标签: c++ string codeblocks

我将软件设为自动柜员机,因此当用户尝试输入密码时,用户只会看到*******,但在尝试删除时,它不会删除字符。它只是添加了一个新的。这是我的代码:

string password2 = "";

cout << "PASSWORD: ";

ch = _getch(); 
while(ch != 13) //character 13 is enter
{
   password2.push_back(ch);
   cout << '*';
   ch = _getch();
}

而且,我尝试使用pop_back();,但它也不起作用。请有人帮帮我吗?

1 个答案:

答案 0 :(得分:0)

做了一点魔术并创造了这个: 我必须承认,我不喜欢这种风格......但它“有效”!

#include<iostream>
#include<string>
#include <conio.h>

bool verify_pass(const std::string& pass)
{
    std::string input = "";
    char ch = '0';
    while(true)
    {
        ch = getch();
        if(ch == '\b')
        {
            if(input.size() > 0)
            {
                input.erase(input.begin() + input.size() - 1);  // erase last char
                std::cout << "\b \b";
            }
        }
        else if(ch != '\r\n' && ch != '\n' && ch != '\r')
        {
            input += ch;
            std::cout << '*';
        }
        else
            break;
    }
    return input == pass;
}

int main()
{
    std::string insecurePass = "1234";
    std::cout << "Enter Password: ";

    if(verify_pass(insecurePass))
        std::cout << "\nCorrect!\n";
    else
        std::cout << "\nFalse!\n";

}

顺便说一下,你可以使用像我使用字符串的向量,但是使用push_back而不是+ =和pop_back()应该也可以使用push而不是我的方法。