2017-07-02 88 views
0

我正在嘗試製作一個簡單的奇數/偶數編程,但我想比較用戶輸入的編號。當我輸入任何不是數字的符號時,我會得到第二個異常,但是當我按下輸入即,沒有給出任何價值,除了第一個,我仍然得到第二個,當我不給任何價值時,我試圖得到第一個。我的問題是當我按下回車鍵時如何獲得第一個例外文本,因爲現在我只輸入第二個,不管輸入什麼。奇數/偶數驗證輸入

Console.WriteLine("Enter a number: "); 
     try 
     { 
      var number = int.Parse(Console.ReadLine()); 
      if (number % 2 == 0) 
       Console.WriteLine($"Entered number {number} is even."); 

      else 
       Console.WriteLine($"Entered number {number} is odd."); 
     } 
     catch (ArgumentNullException) 
     { 
      Console.WriteLine("You need to enter some value."); 
     } 

     catch (Exception) 
     { 
      Console.WriteLine("You need to enter a number."); 
     } 
+0

你的問題是什麼?順便說一下,我建議你閱讀輸入行,檢查它是不是空的,然後嘗試解析它 –

+0

請更明確 –

+0

對不起,我不夠清楚。當我按下回車鍵時,我想獲得第一個例外文本,因爲現在我總是得到第二個。 –

回答

2

如果您只是按下輸入,您應該趕上FormatException,因爲string.Empty正在傳遞給int.ParseArgumentNullException只在傳遞給int.Parse的輸入值爲null時才被拋出。下面是例子,你如何做到這一點,並根據輸入值編寫不同的消息:

Console.WriteLine("Enter a number: "); 
string input = Console.ReadLine(); 
try 
{ 
    var number = int.Parse(input); 
    if (number % 2 == 0) 
     Console.WriteLine($"Entered number {number} is even."); 

    else 
     Console.WriteLine($"Entered number {number} is odd."); 
} 
catch (FormatException exc) 
{ 
    if(string.IsNullOrEmpty(input)) 
    { 
     Console.WriteLine("You need to enter some value."); 
    } 
    else 
    { 
     Console.WriteLine("You need to enter a number."); 
    } 

} 

catch (Exception exc) 
{ 
    Console.WriteLine("You need to enter a number."); 
} 
+0

是的,'FormatException'現在捕獲兩個字母,當我只是按下輸入。那會的,謝謝!有沒有辦法顯示2種不同的例外情況,一種是當用戶輸入的不是數字,另一種是按下輸入時的另一種例外。 –

+0

@MarkWest看看更新後的答案 –

+0

就是這樣,謝謝!我不知道爲什麼我的問題被降低了。 –

0

如果不輸入任何值,該值不是但「」(空字符串),這就是爲什麼它不是一個ArgumentNullException

做喬治·亞歷山大如何建議

string s = Console.ReadLine(); 
if(s == "") 
{ Console.WriteLine("You need 
    to enter some value."); } 
+0

那麼,如何編輯它以獲得第一個異常工作?以某種方式使用iSNullOrEmpty? –

+0

已編輯的代碼@Mark west –

+0

您的代碼遠沒有效c# –

2

試試這個:

var str = Console.ReadLine(); 
if (string.IsNullOrEmpty(str)) 
{ 
    Console.WriteLine("You need to enter some value."); 
} 
else 
{ 
    int number; 
    if (!int.TryParse(str, out number)) 
    { 
     Console.WriteLine("You need to enter a number."); 
    } 
    else 
    { 
     if (number % 2 == 0) 
      Console.WriteLine($"Entered number {number} is even."); 
     else 
      Console.WriteLine($"Entered number {number} is odd."); 
    } 
} 
+0

這絕對有效,並感謝你,但我想用例外做到這一點。 –

+0

@MarkWest你知道'try/cath'構造比代碼更慢嗎? 如果你知道它並且無論如何都想使用它,那是你的選擇。 –

+0

我現在不擔心速度。我只是想學習不同的方法。 –