如果您未编写正确的个人识别码,我一直在尝试完成此小型应用程序,以计算尝试次数。
到目前为止,这是我的代码,我不明白为什么我的代码无法正常工作,并且不断地不断增加。
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);
}
答案 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();
}
}
现在至少要按预期检查引脚。尽管此时您有一些逻辑可以重新考虑您的程序。在我的头顶上...
也许这样的事情可能会让您入门:
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;
}
}