Ниже приведен код для программы входа в систему, которая вводит имя пользователя, а затем пароль, при этом выводя ‘*’ для каждого введенного символа, а затем сравнивает имя пользователя и пароль с заданными значениями, чтобы увидеть, соответствуют ли они программе, и выходит из программы, если она есть. правда, иначе это восходит к началу.
int main()
{
int i = 0; string u; char parr[i + 1], ch;
while (1)
{
system("cls");
cout << "Enter username." << endl;
cin >> u;
system("cls");
cout << "Enter password." << endl;
i = 0;
while (1)
{
tag:ch = getch();
if (ch == '\r')
{
break;
}
if (ch == '\b')
{
cout << '\b';
--i;
ch = '\0';
parr[i] = '\0';
cout << ' ' << '\b';
goto tag;
}
parr[i] = ch;
ch = '*';
cout << ch;
++i;
}
parr[i] = '\0';
string p = "password";
if (u == "username" && parr == p)
{
system("cls");
cout << "Welcome!";
break;
}
else
{
system("cls");
cout << "Username and password entered does not match! Please try again.";
}
getch();
}
getch();
}
Теперь вот проблема: недавно я обнаружил, что этот метод ввода (для пароля) не работает должным образом с клавишами Backspace, Delete или клавишами со стрелками. Все эти клавиши вводят определенные символы вместо удаления символов или перемещения курсора. Так что я попробовал обходной путь (в настоящее время только) для клавиши возврата. Все работало нормально — предыдущий символ был удален, когда я нажал клавишу Backspace, но в итоге после сравнения с предустановленными значениями он показал, что пароль не совпадает.
Не могли бы вы помочь мне в следующем:
* Рабочая функциональность Backspace (и удаление и клавиши со стрелками, если это возможно)
* Нажатие Esc в любой точке программы завершает работу.
*Я использовал goto
в этой программе, о зверствах которой мы все уже знаем. Пожалуйста, предложите мне способ избежать этого, а также сделать весь этот код более аккуратным, чем его текущее состояние.
использование continue
вместо goto
, В вашем случае это будет делать то же самое: перейти к началу цикла.
Затем запустите отладчик и посмотрите, что произойдет с вашим массивом, если вы введете backspace.
Других решений пока нет …