是什么导致了这两个循环的不同?

What is causing the difference in these two loops?

static void Main(string[] args)
{
    int num = Convert.ToInt32(Console.ReadLine());
    int res = 1;
    while (res <= num)
    {
        res++;
        if ((res % 2) == 0)
        {
            Console.WriteLine(res);
        }
    }
}

我使用 int 8、10 和 5 作为我的控制组,它们应该只输出从 1 开始到输入数字 (8,10,5) 的偶数。

static void Main(string[] args)
{
    int num = Convert.ToInt32(Console.ReadLine());
    for (int res = 1; res <= num; res++)
    {
        if ((res % 2) == 0)
        {
            Console.WriteLine(res);
        }
    }
}

谁能帮我理解一下?

在第一个循环中增加变量 res,然后检查它是否偶数。

在第二个循环中,您检查它是否是事件,并在每次迭代结束时增加 res 变量的值。

不同之处在于,在第二个循环中,您在每次迭代的最后递增 res(这就是 for 循环的工作方式),而在第一个循环中,您递增 res 在检查“偶数”之前。

这意味着当 res 为 5 并且 while 循环的新迭代开始时,res 首先递增到 6,并且 6 通过检查,导致打印 6。但是,在 for 循环中,res 在 5 未通过偶数检查后递增。然后迭代停止,因为 6 现在大于 5。

要使 while 循环与 for 循环相同,请将 res++ 移至末尾:

while (res <= num)
{
    if ((res % 2) == 0)
    {
        Console.WriteLine(res);
    }
    res++;
}