For循环在c#中没有正常运行



所以,我是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!");
}
}
}

最新更新