2014-02-08 29 views
-1

在我的代碼中使用catch-try後出現此錯誤。當我沒有在代碼中使用try-catch時,編輯器不會給出這個錯誤,但是當我在try-catch代碼中關閉我的程序時,它開始給出這個錯誤。我的代碼給出在下面。使用未分配的本地變量'month'

try 
{ 
    month = Int32.Parse(Console.ReadLine()); 
} 
catch (FormatException ee) 
{ 
    Console.WriteLine(ee.Message); 
} 
if (month > 12 || mnth < 0) 
{ 
    Console.Write("----Incorrect Month...plz Re-"); 
    lp_val = 1; 
} 
+0

將錯誤提示的月份替換爲mnth。 – dotTutorials

+3

'month'和'mnth'變量有什麼不同?或者你只是錯過了打字。 –

回答

1

問題:你聲明的變量mnth但因此未intialize it.so如果用戶輸入不是一個有效的integre作爲輸入解析函數拋出的異常和可變mnth仍然是未初始化。

解決方案:在聲明時初始化變量mnth

試試這個:

try 
{ 
    mnth=0; 
    mnth = Int32.Parse(Console.ReadLine()); 
} 
catch (FormatException ee) 
{ 
    Console.WriteLine(ee.Message); 
} 
if (mnth > 12 || mnth < 0) 
{ 
    Console.Write("----Incorrect Month...plz Re-"); 
    lp_val = 1; 
} 

OR

您可以將您如果try塊內塊。

try 
{ 
    mnth=0; 
    mnth = Int32.Parse(Console.ReadLine()); 
    if (mnth > 12 || mnth < 0) 
    { 
     Console.Write("----Incorrect Month...plz Re-"); 
     lp_val = 1; 
    } 
} 
catch (FormatException ee) 
{ 
    Console.WriteLine(ee.Message); 
} 
+0

謝謝@蘇達卡 –

+0

@PirFahimShah:歡迎您:),我很樂意幫助您。 –

0

首先,你有兩個變量,monthmnth。看起來這只是通過在此發佈問題而創建的wan錯誤,但如果不是這樣,請確保您解決代碼中的任何拼寫錯誤。

如果由Int32.Parse引發的例外情況,結果將永遠不會被分配給month,因此當您稍後評估條件時,不保證分配結果。

該溶液是初始化的try塊之外變量:

int month = 0; 

或者用Int32.TryParse而不是在一個try/catch包裹它:

int month; 
if (!Int32.TryParse(Console.ReadLine(), out month)) 
{ 
    Console.WriteLine("Unable to parse input"); 
} 
0

除了事實如果try-block代碼拋出一個異常,則該行不會被執行,並且mnth未被初始化爲任何值。

0

看起來像你聲明month變量,但你沒有初始化它。

此代碼給出與您的代碼相同的錯誤;

int month; 
if(month < 12) 
{ 
    // 
} 

這就是爲什麼你應該在使用它之前初始化它。例如使用;

int month = 0; 

代替

int month; 
相關問題