2012-11-04 128 views
4

的Visual Studio口口聲聲說Use of unassigned variableiValiNumber。誰能告訴我我要去哪裏?使用未分配的局部變量?

這被設計成詢問用戶繼續輸入整數相加,直到用戶想要停止代碼。然後在控制檯上顯示整數的總和。

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

namespace AddFive 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      int iNumber; 
      int iVal; 
      int iTotal = 0; 

      while (iVal > 0) 
      { 
       Console.WriteLine("Enter number " + iNumber); 
       iVal = Convert.ToInt32(Console.ReadLine()); 
       iTotal = iTotal + iVal; 
      } 

      if (iNumber <= 0) 
      { 
       Console.WriteLine("Total = " + iTotal); 
       iVal = Convert.ToInt32(Console.ReadLine()); 
       iTotal = iTotal + iVal; 
      } 

      Console.WriteLine("Total = " + iTotal); 
      Console.WriteLine(); 
      Console.WriteLine("Press any key to close"); 
      Console.ReadKey(); 
     } 
    } 
} 
+0

如果比較線ITOTAL和i編號和IVAL的差異會很容易現貨我猜... – rene

回答

3

在C#中,您必須在使用它之前爲變量賦值。

例如

int iNumber = 0; 
int iVal = 0; 
+0

其實你不需要作者只是得到一個警告不是編譯器錯誤。考慮到「整數」的默認值爲「0」,他們可以忽略警告。 –

+0

@Ramhound在這個例子中你收到了兩個錯誤,而不是警告。 – kmatyaszek

5

Visual Studio是正確的,你試圖引用一個未初始化的變量。

試試這個:

int iNumber = 0; 
int iVal = 0; 

這樣,你被初始化變量的0 原來問題的初始值出現在這些線路上:

while (iVal > 0)if (iNumber <= 0)

在嘗試訪問變量之前給它們一個值。

7

爲這些變量賦值。你需要使用它們

int iNumber = 0; 
    int iVal = 0; 

前值賦給局部變量,當你寫while (iVal > 0)iVal價值尚未確定

您可以只用實例/類變量脫身,因爲他們被初始化爲默認值

public class Program 
{ 
    int i; //this was not implicitly initialized to zero (0) 

    public Program() 
    { 
     int j; //need to initialize this before use 

     Console.Write(j); //this throws "Use of unassigned variable" error 
     Console.Write(i); //this prints 0, the default value 
    } 
} 
3

需要初始化iNumberiVal。考慮一下當前代碼中第一次通過while循環得到的值。

3

您的iVal參數未在您的while循環中分配。你初始化時需要給出一個值。

0

的問題是在幾個地方您在使用之前,他們第一次(在你的while語句)不分配一個值,i編號或IVAL指出。在這種特殊情況下,它是良性的,並指定默認值是什麼改變了一件事情。錯誤雖然合適。從歷史上看,未賦值的變量在允許使用未賦值變量的語言中令人頭痛。特別是在不將存儲位置初始化爲默認值的語言中。在這種情況下,C#會初始化爲默認值,但仍可能導致難以發現錯誤。編譯器非常聰明,可以在達到特定的本地使用之前檢查代碼所需的路徑,如果您可以通過指定值來實現,那麼它會發出抱怨。這可以在複雜的代碼有助於在當順序讀取的代碼會導致您認爲當地已分配但實際上由於條件邏輯它不是