【问题标题】:C# Increment operator (++) question:Why am i getting wrong output?C# 增量运算符 (++) 问题:为什么我得到错误的输出?
【发布时间】:2011-05-16 07:53:07
【问题描述】:

我有一个简单的 C# 控制台应用程序,但我得到了错误的输出,为什么?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication11
{
class Program
{
    static void Main(string[] args)
    {
        int i = 100;
        for (int n = 0; n < 100; n++)
        {
            i = i++;
        }
        Console.WriteLine(i);
    }

}
}

【问题讨论】:

标签: c#


【解决方案1】:

i++ 是一个表达式,它返回i,然后将其递增。

因此,i = i++ 将评估i,增加i,然后在增加之前将i 分配给原始 值。

您需要使用++i,它将返回递增的值。

【讨论】:

    【解决方案2】:

    我猜你真的想解释为什么它不能按预期工作,而不是真正得到结果,因为你可以通过首先将 i 设置为 200 来得到结果。

    在创建变量的临时副本后应用后增量运算符。临时用于语句中的操作,然后执行分配,因此您的循环相当于:

        for (int n = 0; n < 100; n++)
        {
            j = i;
            i++;
            i = j;
        }
    

    既然如此,增量基本上被丢弃了,i 从未真正增加过。

    【讨论】:

      【解决方案3】:
      i = i++;
      

      这会将 i 设置为 i 的旧值,然后将其递增。我想你想要:

      i++;
      

      如果你的编译器很糟糕并且没有优化返回,那就更好了:

      ++i;
      

      干杯。

      【讨论】:

      • 或者,更好的是i += 2。在 C/++ 中,i = i++; 是明确未定义的。
      【解决方案4】:

      i = i++; 行两次写入变量 i。后自增先执行,然后赋值语句将其覆盖。

      试试i++;

      【讨论】:

        【解决方案5】:

        只使用 i++,而不是 i = i++。

        【讨论】:

          猜你喜欢
          • 2012-04-26
          • 2020-10-21
          • 1970-01-01
          • 1970-01-01
          • 2021-12-10
          • 2011-09-23
          • 2022-08-19
          • 1970-01-01
          • 2011-06-15
          相关资源
          最近更新 更多