2014-05-15 43 views
0

我已經使用此功能進行了使用密碼的簡單登錄。當我第一次嘗試使用正確的密碼時,它會正常工作,然後當我使用我所有的嘗試時,它也按預期工作。但是,如果我在第一次嘗試中使密碼錯誤,它將不會在第二次和第三次嘗試時接受正確的密碼。登錄功能,如果第一次嘗試時代碼不對,則不會登錄

下面的代碼:

void login(string password) 
{ 
    string input; 
    int loginAttempt = 0; 
    int RightPassword = 0; 

    cout << "Hello! To use the Home Automation System, please login." << endl; 

    while (RightPassword == 0) 
    { 
     cout << "\nEnter your user password: "; 
     char temp; 
     while(true) /* Infinite loop, exited when RETURN is pressed */ 
     { 
      temp = getch(); /* Get the current character of the password */ 
      if (GetAsyncKeyState(VK_RETURN)) 
      { 
       break; 
      } 
      input += temp; 
      cout << '\01'; /* Print a smiley */ 
     } 
     for (int i = 0; i <= input.length(); i++) 
     { 
      if (input[i] != password[i]) 
      { 
       ++loginAttempt; 
       cout << "\nWrong password, " << 3 - loginAttempt << " attempts left." << endl; 
       break; 
      } 
      RightPassword = 1; 

     } 
     if (loginAttempt == 3) 
     { 
      cout << "Too many login attempts! The program will now terminate."; 
      exit(1); 
     } 
     cin.clear(); 
    } 
    system("CLS"); 
    cout << "Welcome user! Thank you for logging in.\n"; 
} 

我也希望有辦法用退格鍵刪除前一個字符,而不是作爲一個字符計數,當我鍵入密碼。你能幫忙嗎?

非常感謝!

回答

1

string input不會被清零,因此不斷被加入到

所以input被碰得是這樣的:badpasswordcorrectpasswordreallycorrectpassword

要解決簡單清晰input對每一個試圖

http://www.cplusplus.com/reference/string/string/clear/

+0

你真棒,謝謝!你能幫我解決我的另一個問題嗎? – Thisen

+0

'cout <<'\ b'; //返回一個字符' 'cout <<「\ 01」; //寫出笑臉'這會覆蓋以前輸入的字符。 – JasonSec

+0

cout <<'\ b';似乎不起作用,它只是不會寫字符。 :d – Thisen

0

在嘗試失敗後,您似乎沒有重置您的「輸入」變量。這意味着您以前的所有嘗試都將存儲在「輸入」中,並且將來會影響您的密碼檢查。添加類似

input = ""; 

檢測到失敗的密碼後。

0

input="";就在你cout之後< <「請輸入密碼」;

相關問題