Infinitium2002 Ответов: 4

Как ограничить пользователя после 3 попыток ввода пароля с помощью DO.. До цикла в VB


Создайте программу, которая позволяет пользователю до 3 попыток ввести пароль "секретно". Если пользователь вводит пароль правильно в течение 3 попыток, отображается сообщение о том, что пароль действителен. В противном случае программа выведет сообщение о том, что пароль неверен.

ИСПОЛЬЗУЯ DO...До петли с IF..ЗАТЕМ

ЭТО ДОЛЖНО БЫТЬ СДЕЛАНО С ПОМОЩЬЮ DO.... ДО ПЕТЛИ. ПОЖАЛУЙСТА, НИКАКИХ "ЕСЛИ"..ЗАТЕМ.
УЧИТЕЛЬ ПОПРОСИЛ НАЙТИ РЕШЕНИЕ С ПОМОЩЬЮ DO.... ДО ПЕТЛИ
ЭТО ДЛЯ ШКОЛЬНОГО ЗАДАНИЯ.

Что я уже пробовал:

Я смог сделать это только через "Если".. Тогда, но я не могу сделать это с помощью DO.... ДО ПЕТЛИ.
Пожалуйста, это срочно.
Это кодировка, которую я использовал, но она работает неправильно.
Пожалуйста, дайте мне правильный ответ.
Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim pass, word As String
        Dim num As Integer
        num = 1
        pass = "secret"
        word = TextBox1.Text
        'If word = pass Then
        '    MsgBox("VALID")
        'Else
        '    MsgBox("INVALID")
        'End If
        'num = num + 1
        'Do
        '    num = num + 1
        'Loop Until num = 3
        'MsgBox("RUN")
        Do
            If num >= 3 Then
                MsgBox("ATTEMPTS EXCEEDED")
            End If
            If word = pass And num <= 3 Then
                MsgBox("VALID")
            End If
            'Do
            '    num += 1
            'Loop Until num > 3
            'If num >= 3 Then
            '    MsgBox("ATTEMPTS EXCEEDED")
            'End If
            'If word <> pass Then
            '    MsgBox("INVALID")
            'End If
            num += 1
            If word <> pass Then
                MsgBox("INVALID")
            End If
        Loop Until num > 3
    End Sub
End Class

[no name]

Насколько я знаю WinForms, образец кода, который вы обновили, будет срабатывать при первом нажатии кнопки, и если он будет правильным, то в противном случае условие attemps не будет иметь никакого эффекта. Но вы все равно можете объявить переменную 'num' статической, это будет иметь некоторый смысл.

[no name]

Использование цикла Do таким образом в программе, управляемой событиями, не имеет смысла.

4 Ответов

Рейтинг:
2

User 11061201

Для этого Вам не нужен цикл Do, если только вы не выполняете другие вычисления.

В вашей форме или UserControl, где присутствует кнопка входа в систему, добавьте;

Dim attempts As Integer = 0

Dim userName As String = "user123"
Dim password As String = "12345"

Private Sub btLogin_Click(sender As Object, e As EventArgs) Handles btLogin_Click

If attempts >=3 Then
'maximal attempts reached
MsgBox("You reached the maximum attempts to log in!")
Exit Sub
End If


If (textBoxUserName.Text = userName) AndAlso (textBoxPasword.Text = password) Then
'Correct username and password

   'add code to procede

Else
'Incorrect username or password
attempts +=1
End if


End Sub


Ralf Meier

Я не знаю, почему этот ответ был отвергнут. На мой взгляд, это полностью соответствует вопросу ... (Я поддержал его, чтобы исправить это)
Но я думаю, что ОП попросил решение, основанное на консольных операциях (потому что это своего рода домашнее задание). С консольными операциями это можно сделать с помощью цикла-в приложении, основанном на событиях, что невозможно.

Возможно, ОП должен предоставить свой код ...

[no name]

Я бы предположил, что это было понижено, потому что вопрос (и, вероятно, домашнее задание) ясно указывает, что OP должен использовать цикл Do. Таким образом, это решение не отвечает на заданный вопрос.

Infinitium2002

Здесь этот вопрос должен быть сделан с помощью цикла Do.

Ralf Meier

В этом случае решение 3 должно почти соответствовать вашим требованиям.
Но в будущем : если вы хотите получить решение, соответствующее вашим требованиям, то сообщите нам все условия и ... возможно, предоставьте какой-нибудь код. Понижать голос за ответ в таком состоянии для меня глупо ...

Рейтинг:
1

Richard MacCutchan

Попробуйте что-нибудь вроде этого:

Dim attempts As Integer
attempts = 0
Do
    attempts = attempts + 1
    If password = "secret" Then
        MsgBox("VALID")
        Exit Do
    Else
        MsgBox("Invalid")
    End If
Loop Until attempts > 2


Infinitium2002

Но это не сработало.

[no name]

И это не произойдет в программе, управляемой событиями. Вам уже говорили об этом.

Рейтинг:
1

kmoorevs

Вот он как консольное приложение без каких-либо "если-то".

Помните, что вы можете поставить несколько условий на выход из цикла.

Dim pwTries As Integer = 0
Const secretPassword = "secret"
Dim pwMatch As Boolean = False
Do Until pwMatch Or pwTries > 2
    Console.WriteLine("Enter you password.")
    pwMatch = (Console.ReadLine = secretPassword)
    pwTries += 1
Loop
Console.WriteLine("Password is " & If(pwMatch, "valid", "incorrect") & ".")
Console.WriteLine("Click any key to continue.")
Console.ReadKey()


Infinitium2002

Ваша программа в порядке. Но я должен сделать это в приложении windows forms. Следует использовать форму do как
Делать
заявление(ы)
цикл до состояния

Рейтинг:
0

Infinitium2002

Здесь я нашел решение. Вот он,
dim pass, пользователь в виде строки
попытка dim как целое число=0
pass= " секретно"
делать
попытка+=1
user=InputBox ("введите пароль. Это попытка " & amp; попытка)
цикл до тех пор, пока Попытка=3 или пользователь=проход
Если user=pass, то
msgbox ("действителен")
ещё
msgbox ("недопустимо")
За endif