2017-10-05 34 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"); 
      } 
     }