首页 > 解决方案 > 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();

标签: c#visual-studio

解决方案


如果您在 NumberOfTries 设置为 10 的情况下获得 2 次通过,那么您在再次执行代码之前没有重新编译代码。在 NumberOfTries 设置为 10 的情况下运行该代码会给您 5 次尝试。for这是因为您在每次尝试失败时都会减少循环的条件。

条目检查: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 -> Bail

要获得所需的行为,您应该区分最大尝试计数和尝试次数:

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循环的条件,但在执行此操作时需要小心以避免意外的副作用。


推荐阅读