PIN码应用程序可增加尝试次数

时间:2019-02-20 11:44:05

标签: c#

如果您未编写正确的个人识别码,我一直在尝试完成此小型应用程序,以计算尝试次数。

到目前为止,这是我的代码,我不明白为什么我的代码无法正常工作,并且不断地不断增加。

private void btn_login_Click(object sender, EventArgs e)
    {
        int attempts = 0;
        int pin_number;
        do
        {
            pin_number = int.Parse(txt_pin.Text);
            MessageBox.Show("Hi There");
            if (pin_number != 1326)
            {
                attempts++;
                MessageBox.Show($"pin code is incorrect you have {attempts} of 3 attempts left");
                txt_pin.Text = "";
                txt_pin.Focus();
            }

        } while (pin_number == 1326 && attempts < 3);

    }

2 个答案:

答案 0 :(得分:3)

每次单击按钮都是一次“尝试”,对吗?好吧,每次您单击按钮时,您要做的第一件事就是

int attempts = 0;

因此,每次尝试都是第一次尝试。 (当用户正确使用时)。那么您拥有的是无限循环,因为pin_number是正确的,并且attempts永远不会递增。

首先,完全摆脱循环。无需重复检查相同的输入。一旦被检查,就被检查。其次,跟踪每次尝试范围之外的尝试次数,例如在类级别。第三,检查尝试次数。也许是这样的:

private int attempts = 0;
private void btn_login_Click(object sender, EventArgs e)
{
    int pin_number;
    pin_number = int.Parse(txt_pin.Text);
    MessageBox.Show("Hi There");
    if (attempts < 3 && pin_number != 1326)
    {
        attempts++;
        MessageBox.Show($"pin code is incorrect you have {attempts} of 3 attempts left");
        txt_pin.Text = "";
        txt_pin.Focus();
    }
}

现在至少要按预期检查引脚。尽管此时您有一些逻辑可以重新考虑您的程序。在我的头顶上...

  1. 它从不通知用户正确的密码。也许还应该发生其他事情?
  2. 尝试次数用完后,没有警告表明这一点。如果针脚正确,则外观完全相同。
  3. 文字暗示尝试次数正在递减,但实际上正在增加。

也许这样的事情可能会让您入门:

private int attempts = 3;
private void btn_login_Click(object sender, EventArgs e)
{
    int pin_number;
    pin_number = int.Parse(txt_pin.Text);
    MessageBox.Show("Hi There");
    if (attempts <= 0)
    {
        MessageBox.Show($"No more attempts left");
    }
    else if (pin_number != 1326)
    {
        attempts--;
        MessageBox.Show($"Pin code is incorrect you have {attempts} attempts left");
        txt_pin.Text = "";
        txt_pin.Focus();
    }
}

检查逻辑中的每个语句。对于您自己的逻辑,尤其是围绕if的块和循环之类的东西,也许甚至拿起一张纸,画出不同的代码路径,并在每个路径中写下应该发生的情况。每个细节都很重要,例如何时显示消息或何时修改值。可以在此代码中添加很多修饰语,并且我认为这是一项学术活动,所以我将其留给您。

答案 1 :(得分:1)

现在,您的按钮单击处理程序中有一个循环。您可能不希望这样做,因为您希望使用户能够输入新的个人识别码并再次单击“登录”按钮。

但这还意味着您需要将点击次数存储在点击处理程序之外,因为它需要从一次单击保存到下一次。

因此,如果将代码更改为类似的内容,我想您将获得想要的功能

private int attempts = 0;
private void btn_login_Click(object sender, EventArgs e)
{
    int pin_number;
    pin_number = int.Parse(txt_pin.Text);
    MessageBox.Show("Hi There");
    if (pin_number != 1326)
    {
        attempts++;
        MessageBox.Show($"pin code is incorrect you have {3-attempts} of 3 attempts left");
        txt_pin.Text = "";
        txt_pin.Focus();
    }

    if (attempts >= 3)
    {
        btn_login.Enabled = false;
    }
}