所以,我是c#的学习者,我正在创建一个简单的应用程序,让你输入一个字符串代码,然后你输入另一个字符串,如果(string1 == string2)它输出"访问授权",如果不是它说"错误的代码,再试一次"然后回到起点。现在我想创建一个变量NumberOfTries,如果(NumberOfTries == 0)输出"安全锁定"并退出程序。问题是它只循环了2次,我不知道为什么,不管我给它什么值。下面是代码:
int NumberOfTries = 3; //Even when = 10, it only goes 2 times
Console.WriteLine("Safe code: ");
string input= Console.ReadLine();
Console.WriteLine("Safe code is: " +input);
for (int i = 0; i < NumberOfTries; i++)
{
Console.WriteLine("Input code: ");
string code= Console.ReadLine();
if (input == code)
{
Console.WriteLine("Access granted!");
break;
}
else
{
Console.WriteLine("Wrong code, try again!");
NumberOfTries--;
}
}
if (NumberOfTries == 0)
Console.WriteLine("Safe locked!");
Console.ReadKey();
如果你得到2传递与NumberOfTries设置为10,那么你没有重新编译你的代码之前再次执行它。在NumberOfTries设置为10的情况下运行代码会给你5次尝试。这是因为每次失败的尝试都在减少for
循环的条件。
Entry check: i=0, NumberOfTries = 10
第二次检查:i = 1, NumberOfTries = 9
第三次检查:i = 2, NumberOfTries = 8
第4次检查:i = 3, NumberOfTries = 7
第5次检查:i = 4, NumberOfTries = 6
第6次检查:i = 5, NumberOfTries = 5 ->保释
要获得期望的行为,您应该区分最大尝试计数和尝试次数:
int maxTries = 3;
int numberOfTries = 0;
Console.WriteLine("Safe code: ");
string input= Console.ReadLine();
Console.WriteLine("Safe code is: " +input);
for (int i = 0; i < maxTries; i++)
{
numberOfTries++;
Console.WriteLine("Input code: ");
string code= Console.ReadLine();
if (input == code)
{
Console.WriteLine("Access granted!");
break;
}
else if (numberOfTries < maxTries)
{
Console.WriteLine("Wrong code, try again!");
}
}
if (numberOfTries >= maxTries)
Console.WriteLine("Safe locked!");
Console.ReadKey();
我们允许循环遍历允许尝试的次数(maxTries)并记录尝试次数,而不是尝试减少尝试次数,并增加尝试计数器(numberOfTries)。当用户输入错误时,我们在显示"重试"之前检查他们是否在最后一次尝试,在退出循环时,我们在锁定之前检查他们是否使用了所有的尝试。
你可以修改c#for
循环的条件,但是你需要小心,以避免意想不到的副作用。
当= 10时,它将运行5次。既然在for语句中设置了条件i < NumberOfTries
,那么就不需要在else
中执行NumberOfTries--;
了。
可以根据i的值判断for循环的次数,并输出"Safe locked!"当机会用尽。
for (int i = 0; i < NumberOfTries; i++)
{
Console.WriteLine("Input code: ");
string code = Console.ReadLine();
if (input == code)
{
Console.WriteLine("Access granted!");
break;
}
else
{
if (i == NumberOfTries - 1)
{
Console.WriteLine("Safe locked!");
}
else
{
Console.WriteLine("Wrong code, try again!");
}
}
}