2013-11-15 48 views
2

在編寫我的代碼時,我收到了a,b和c的錯誤。「使用未分配的本地變量」錯誤C#,「while」命令

  while(n==0) 
     { 
      a = Convert.ToInt32(Console.ReadLine()); 
      b = Convert.ToInt32(Console.ReadLine()); 
      c = Convert.ToInt32(Console.ReadLine()); 
      n=CheckTriang(a, b, c, n); 

     } 

     x=RightTriang(a, b, c, x); 

I輸入的a,b和c的值在循環,然後檢查它們的工作方法CheckTriang(確定所述值可以使一個有效的三角形),和斷裂的條件下,返回N = 1。 我認爲問題可能在於編譯器不確定循環是否會停止提供值。我怎樣才能重寫代碼更清晰?

在此先感謝!

編輯: 我只複製有問題的部分,而不是整個代碼。聲明所需的變量。

+2

我們可以看到你定義和初始化a,b,c和n的部分嗎? –

+0

您可以發表一個有效的例子,以便我們測試您的代碼嗎? –

+1

你在哪裏給x賦值?你最後一行嘗試使用名爲x的值,但據我們所知,它沒有任何價值。設置一些中斷點,並逐行掃描您的代碼。確認一切都有價值。 – sab669

回答

6

切換到一個do-while循環:

do { 
     a = Convert.ToInt32(Console.ReadLine()); 
     b = Convert.ToInt32(Console.ReadLine()); 
     c = Convert.ToInt32(Console.ReadLine()); 
     n=CheckTriang(a, b, c, n); 
    } while (n == 0) 

這樣可以保證你會通過迴路在得到至少一次。

+0

非常感謝,它解決了問題! – Grandsaga

1

確保,當你聲明n,你初始化:

int n = 0; // Add the = 0 
+0

雖然使用它們的默認值初始化結構體。所以'int n = 0;'與'int n'相同' – therealtbs

+0

錯誤是針對a,b和c,其他所有工作都正常。我只複製了一個特定的部分。不管怎麼說,還是要謝謝你。 – Grandsaga

+2

@therealtbs雖然它的值爲零,並且您可以在運行時動態訪問它,但如果您嘗試編譯類似'int n;布爾x = n == 0;' – James

2

問題是如果n==0第一次運行a,b,c,& n永遠不會被初始化。編譯器正在捕獲並警告你。只需添加

int a=0, b=0, c=0, n=0; 

以上while循環

1

您需要通過表明其類型聲明變量,並初始化n您使用它在什麼地方。

int n = 0; 
while(n == 0) 
{ 
    int a = Convert.ToInt32(Console.ReadLine()); 
    int b = Convert.ToInt32(Console.ReadLine()); 
    int c = Convert.ToInt32(Console.ReadLine()); 
    n = CheckTriang(a, b, c, n); 
} 

//replace 'var' by whichever type 'RightTriang' returns. 
var x = RightTriang(a, b, c, x); 
相關問題