【问题标题】:C# While (i++ ...) when increments?C# While (i++ ...) 何时递增?
【发布时间】:2018-08-20 16:37:53
【问题描述】:

为什么 While 循环在检查条件之后而不是在整个循环之后立即对变量进行后递增(或后递减)?

如:

int x = 0;
while (x++ < 5)
Console.WriteLine(x);

输出是:1 2 3 4 5,当我认为它应该是 0 1 2 3 4 时。它似乎立即检查了条件 - 真 - 信息。这是正常的行为吗,因为我最近一直在练习纯 C 并且完全不同。

为了更清楚,我应该选择这个选项吗?

while (x < 5)
Console.WriteLine(x);
++x; 

【问题讨论】:

标签: c# loops while-loop post-increment


【解决方案1】:

如果您使用 for 循环,您的预期答案将是正确的: while 没有任何特殊的内部运作方式。

for (x = 0; x < 5; x++)

这是最清晰的写法。

【讨论】:

    【解决方案2】:

    如果您执行相同的代码,行为是正确的,并且 ANSI-C 会以相同的方式执行此操作。
    x++ 是“一个命令”,并且在您进入下一个命令。 x++++x 的区别在于,后者返回“新值”,而第一个返回“旧值”。
    愿以下是你想要的:

    int x = 0;
    do
    {
        Console.WriteLine(x++);
    }
    while (x < 5);
    

    但我也认为,一般来说,这种“做 5 次”的具体情况最好用 @ikdekker 建议的 for-loop 来解决。

    【讨论】:

      【解决方案3】:

      你的循环相当于:

      int x = 0;
      while (x < 5)
      {
        x++;
        Console.WriteLine(x);
      }
      

      因为增量将在条件行 (x

      所以你的第二个循环是正确的(你应该添加大括号),或者如果你真的想要同时增加条件和增量,你可以使用 do..while 循环:

      int x = 0;
      do
      {
        Console.WriteLine(x);
      } while (++x < 5);
      

      【讨论】:

        【解决方案4】:

        如前所述,您可以为此使用 for 循环。您也可以在 for 循环中声明 x 变量。

        for (var x = 0; x < 5; x++)
        {
            Console.WriteLine(x);
        }
        

        【讨论】:

          【解决方案5】:

          你在错误的地方使用了x++

          Console.WriteLine(x++)
          

          而不是

          while(x++ < 5)
          

          如果有帮助就标记为答案

          【讨论】:

            猜你喜欢
            • 2022-07-20
            • 2014-02-22
            • 2012-07-10
            • 1970-01-01
            • 1970-01-01
            • 2016-02-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多