2014-03-28 25 views
0

我正在製作一個ATM作爲軟件,所以當用戶嘗試輸入密碼時,用戶只能看到*******,但試圖刪除時不會刪除一個字符。它只是增加一個新的。這裏是我的代碼:如何避免在push_back中使用Backspace字符?

string password2 = ""; 

cout << "PASSWORD: "; 

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

還有,我嘗試使用pop_back();但它也不起作用。有人可以幫我嗎?

+4

我想也許我不會跟你一起去!您應該使用您使用的語言功能的文檔。 –

+3

如果輸入字符13,則字符8是退格。這有幫助嗎? –

+0

對不起,它是Backspace字符。 – JoseMiguelCab

回答

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"; 

} 

順便說一句,你可以使用矢量像我使用的字符串,而是使用+ =和pop_back()的的push_back應該工作我的方法用擦的太代替。

+0

謝謝朋友,我會盡力的。 – JoseMiguelCab