2010-11-26 111 views
4

我有一個簡單的c#控制檯應用程序,但我得到錯誤的輸出爲什麼?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); 
    } 

} 
} 
+3

預期產量是多少? – Fredou 2010-11-26 18:49:27

+0

我猜輸出將是200. – 2010-11-26 18:53:29

回答

7

i++是一個表達式,它返回i,然後遞增它。

因此,i = i++將評估i,增加i,然後分配i原來值,它是增加了。

您需要使用++i,它將返回遞增的值。

5
i = i++; 

將i爲i的舊值,然後遞增它。我想你想:

i++; 

或者更好的是,如果你的編譯器是瘸子,沒有優化的回報:

++i; 

乾杯。

4

i = i++;向變量i寫入兩次。後增量首先被執行,但是然後賦值語句覆蓋它。

儘量只i++;

3

只要使用我++,沒有I = I + +。

1

我猜你以爲你會得到的是,我會增加每個循環,但你編碼它的方式是,你分配我的價值自我和++操作發生'後',所以我的價值似乎並沒有增加。 檢查What is the difference between ++i and i++?

7

我猜你真的想要一個解釋,爲什麼它不能按預期工作,而不是實際得到的結果,因爲你可以通過在第一時間設置i等於200 。

在創建變量的臨時副本後應用後增量操作符。臨時用於然後執行分配在聲明中操作,這樣你的循環相當於:

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

既然是這樣的話,增量基本上是丟棄,i不會真正增加。