#c#
#c#
Вопрос:
Для программы, которую я создаю, мне необходимо реализовать функцию, которая позволяет пользователю 3 попытки ввести правильное имя пользователя и пароль, однако у меня возникли проблемы с закрытием программы после 3 неправильных попыток.
Я понимаю, что счетчик с каждой неправильной попыткой-это способ сделать это, но я ни за что на свете не могу понять, почему каждая попытка, которую я пробовал, не сработала и привела к закрытию программы после 3 неправильных попыток.
Я чувствую себя очень глупо, потому что знаю, что это прямо передо мной, как это сделать, хотя я все еще новичок, поэтому я ожидал, что испорчу что-то подобное
private void button1_Click(object sender, EventArgs e) { string stringUser = "User"; string stringPass = "Password"; int i = 0; while (i lt; 3) { if (textBoxUsername.Text != stringUser amp;amp; textBoxPassword.Text != stringPass) { i ; } else { MessageBox.Show("Test"); } } }
Комментарии:
1. Знаете ли вы, как выйти из программы? С вашим кодом есть куча проблем. 1. Нет ничего, что могло бы привести к выходу программы. 2. Вы сбрасываете
i
значение при0
каждом вызове функции. На самом деле,i
не существует вне функции. 3. Проверьте своеif
состояние. Постройте таблицу истинности, если вы в замешательстве.textBoxUsername.Text != stringUser amp;amp; textBoxPassword.Text != stringPass
будет толькоtrue
тогда, когда оба будут неравными. Вы хотите найти случай, когда либо то, либо другое неравноценно.2. 4.
while (i lt; 3)
является неправильным условием для проверки. Как только вы нажимаете на кнопку, ее обработчик выполняется, не давая пользователю возможности изменить ввод, поэтомуi
приif
вводе условия он мгновенно увеличивается до 3 (помните, что в любом случае это неправильное условие). 5. Когдаif
условие не введено,i
оно никогда не увеличивается, поэтому вы вводите бесконечный цикл3. Извините, я должен был сказать, что я полностью перестраивал вещи для тестирования, и это была всего лишь самая последняя копия/вставка того, что у меня есть. У меня было другое утверждение if для if counter gt; max попыток, close(); но по-прежнему ничего не происходило. Я думаю, что все так, как ты сказал, я сбрасываю счетчик, но я не мог понять, как этого не делать
4. Очевидно, что ваш код ужасен, но давайте на мгновение отложим это в сторону. Чтобы делать то, что вы хотите, вам нужно поддерживать количество попыток вне этой функции. Какой фреймворк вы используете? WPF? Формы Windows? Наследие ASP.NET Веб-формы? Во-вторых, что значит близко ? когда пользователь нажимает 3 раза — что вы ожидаете от программы?
5. Windows Forms, и да, я должен был пояснить: ожидается, что программа автоматически закроется при более чем 3 неправильных попытках.
Ответ №1:
Вы сбрасываете значение int i
с каждым нажатием кнопки. Переместите его за пределы функции, чтобы он не сбрасывался.
int attempts = 0; string stringUser = "User"; string stringPass = "Password"; private void button1_Click(object sender, EventArgs e) { if (i gt;= 3){ System.Windows.Forms.Application.Exit(); } if (textBoxUsername.Text != stringUser amp;amp; textBoxPassword.Text != stringPass) { i ; } else { MessageBox.Show("Login Successfull"); } }