2017-10-05 68 views
-3

我正在嘗試爲一個學校作業製作一個功能齊全的計算器應用程序。要做到這一點,雖然我需要使用try-catch來處理DivideByZero錯誤,這是我的代碼現在:Try-Catch格式化C#

try 
{ 
    Console.WriteLine("Type 1st number: "); 
    num1 = Convert.ToInt32(Console.ReadLine()); 

    Console.Write("type 2nd number: "); 
    num2 = Convert.ToInt32(Console.ReadLine()); 

    Console.Write("type operation(x ,/, +, -, Fs) "); 
    operation = Console.ReadLine(); 
} 

catch(DivideByZeroException) 
{ 
    Console.WriteLine("Sorry moron you can't divide by zero"); 
} 

,但它不工作。它似乎使我的代碼在頂部無效。有人知道如何正確格式化嗎?

P.S.全部代碼在這裏:

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

namespace Calculator_MK._2 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Calculator(); 

     } 

     private static void Calculator() 
     { 
      decimal num1; 
      decimal num2; 
      string operation; 
      decimal result; 
      decimal num3; 
      decimal num4; 

      Console.WriteLine("This is IK's Calculator program that should work if you do everything I say"); 
      Console.ReadLine(); 
      try 
      { 
       Console.WriteLine("Type 1st number: "); 
       num1 = Convert.ToInt32(Console.ReadLine()); 


       Console.Write("type 2nd number: "); 
       num2 = Convert.ToInt32(Console.ReadLine()); 

       Console.Write("type operation(x ,/, +, -, Fs) "); 
       operation = Console.ReadLine(); 
      } 

      catch(DivideByZeroException) 
      { 

       Console.WriteLine("Sorry moron you can't divide by zero"); 

      } 

      if (operation == "x") 
      { 
       result = num1 * num2; 
       Console.WriteLine("{0} * {1} = {2}", num1, num2, result); 
       Console.ReadLine(); 
      } 

      else if (operation == "/") 
      { 
       result = num1/num2; 
       Console.WriteLine("{0}/{1} = {2}", num1, num2, result); 
       Console.ReadLine(); 
      } 


      else if (operation == "+") 
      { 
       result = num1 + num2; 
       Console.WriteLine("{0} + {1} = {2}", num1, num2, result); 
       Console.ReadLine(); 
      } 
      else if (operation == "-") 
      { 
       result = num1 - num2; 
       Console.WriteLine("{0} - {1} = {2}", num1, num2, result); 
       Console.ReadLine(); 
      } 
      else if (operation == "Fs") 
      { 

       int a = 0; 
       int b = 1; 
       int c = 1; 

       Console.WriteLine(a); 
       Console.WriteLine(b); 

       for (; c <= 34; c = a + b) 
       { 
        Console.WriteLine(c); 
        a = b; 
        b = c; 
        Console.WriteLine(); 
       } 

      } 
      if (num2 == 0) 
      { 

       Console.WriteLine("Can't divide by zero fool"); 



      } 

     } 

    } 
} 
+0

'catch(DivideByZeroException Ex)' – Gusman

+1

您需要在'try'塊中放置操作邏輯。 – apocalypse

+1

「不工作」是什麼意思?任何錯誤? – HimBromBeere

回答

5

try塊必須是圍繞導致異常,你的情況的代碼,這是

result = num1/num2; 

但它會更好,你打電話之前檢查那裏0這條線,因此避免了例外。

2

你必須try操作本身,而不是操作的選擇:

else if (operation == "/") 
{ 
    try 
    { 
       result = num1/num2; 
       Console.WriteLine("{0}/{1} = {2}", num1, num2, result); 
       Console.ReadLine(); 
    } 
    catch(DivideByZeroException ex) 
    { 
    Console.WriteLine("Sorry moron you can't divide by zero"); 

    } 

} 

現在你嘗試從用戶讀取輸入。如果用戶輸入一些錯誤whichc會拋出一個異常,你try塊將觸發但catch不會,因爲你正在尋找一個DivideByZeroException,它不會通過輸入

3

你有問題發生的是,你必須聲明的嘗試/在應用程序的錯誤位置捕獲:

 try 
     { 
      Console.WriteLine("Type 1st number: "); 
      num1 = Convert.ToInt32(Console.ReadLine()); 


      Console.Write("type 2nd number: "); 
      num2 = Convert.ToInt32(Console.ReadLine()); 

      Console.Write("type operation(x ,/, +, -, Fs) "); 
      operation = Console.ReadLine(); 
     } 

     catch(DivideByZeroException) 
     { 

      Console.WriteLine("Sorry moron you can't divide by zero"); 

     } 

這裏所發生的只是字符串到數字的轉換。沒有數學運算可能會導致DivideByZeroException例外。

相反,你可以包裝後,除法運算和任何你不想跑,如果有一個例外:

 else if (operation == "/") 
     { 
      try 
      { 
       result = num1/num2; 
       Console.WriteLine("{0}/{1} = {2}", num1, num2, result); 
       Console.ReadLine(); 
      } 
      catch (DivideByZeroException) 
      { 
       Console.WriteLine("Sorry moron you can't divide by zero"); 
      } 
     } 

這就是說,它不是一個很好的做法,允許例外的情況發生在C#中,如果他們可以避免。在這種情況下,您只需檢查除數以確保它不爲零以避免發生異常。

 else if (operation == "/") 
     { 
      if (num2 != 0) 
      { 
       result = num1/num2; 
       Console.WriteLine("{0}/{1} = {2}", num1, num2, result); 
       Console.ReadLine(); 
      } 
      else 
      { 
       Console.WriteLine("Sorry moron you can't divide by zero"); 
      } 
     }