Поэтому я создаю простую программу для паролей, которая запрашивает ввод, но маскирует его звездочками (*). У меня работает код, но когда я возвращаюсь назад, возвращаемая строка выглядит так, как будто я никогда не возвращался.
Что бы я набрал:
12345
Я дважды ударил бы по backspace, и строка выглядела бы так:
123
Но когда я нажимаю Enter, он возвращает это:
1234
Вот код, который у меня есть.
#include <iostream>
#include <string>
#include <conio.h> //Regular includes.
using namespace std;
string Encrypted_Text(int a) { //Code for the password masker
string Pwd = " "; //Creates password variable.
char Temp; //Temporary variable that stores current keystroke.
int Length = 0; //Controls how long that password is.
for (;;) { //Loops until the password is above the min. amount.
Temp = _getch(); //Gets keystroke.
while (Temp != 13) { //Loops until enter is hit.
Length++; //Increases length of password.
Pwd.push_back(Temp); //Adds newly typed key on to the string.
cout << "*";
Temp = _getch(); // VV This is were the error is VV
if (Temp == 8) { // detects when you hit the backspace key.
Pwd.pop_back; //removes the last character on string.
cout << "\b "; //Deletes the last character on console.
Length--; //decreases the length of the string.
}
}
if (Length < a) { //Tests to see if the password is long enough.
cout << "\nInput Is To Short.\n";
Pwd = "";
Temp = 0;
Length = 0;
}
else {
break;
}
}
return Pwd; //Returns password.
}
И в моей основной функции у меня есть это:
string Test = Encrypted_Text(5);
cout << "you entered : " << Test;
В вашем коде вы push_back
какой бы персонаж вы ни получили. Только после этого вы удаляете персонажа, если это забой. Вот почему это не работает.
Вы должны сначала проверить наличие специальных символов, и только если вы не добавили этот символ.
Также нет необходимости иметь Length
переменная с std::string
знает его длину, и вы можете получить его оттуда.
Других решений пока нет …