switch (d)
            {
                case '+': c = a + b; break;
                case '-': c = a - b; break;
                case '*': c = a * b; break;
                case '/': try { c = a / b; }
                          catch (Exception x)
                              { MessageBox.Show(x.Message); }
                                     break;
这是我写计算器的一段代码,为什么调试的时候,当运行除法,b=0的时候不能触发异常呢?textbox上显示的是正无穷或负无穷呢??
望高手解答一下

解决方案 »

  1.   

    private void button13_Click(object sender, EventArgs e)   //实现=号的功能
            {
                if (textBox1.Text.Length == 0) return;
                try
                {
                    b = double.Parse(textBox1.Text);
                }
                catch(Exception x)
                {
                    MessageBox.Show(x.Message);
                }
                switch (d)
                {
                    case '+': c = a + b; break;
                    case '-': c = a - b; break;
                    case '*': c = a * b; break;
                    case '/': try { c = a / b; }
                              catch (Exception x)
                                  { MessageBox.Show(x.Message); }
                                         break;            }
                textBox1.Text = c.ToString();
    这是我实现等号时的代码,我觉得定义没错把!!
      

  2.   

    C#工程的默认设置是不抛出除零异常,溢出异常等。你可以在项目中改变设置,或,在代码中要求检查:
            try 
            { 
                checked { c = a / b; }          //<----
            } 
            catch (Exception x) 
            { 
                MessageBox.Show(x.Message); 
            }
     
      

  3.   

    我单步运行的,发现try catch块根本不走的 直接就做c=a/b 这是为什么啊?
      

  4.   


    我的说法有两个错误,更正一下:
    1、C#工程的默认设置是不抛出溢出异常(比如两个short相加大于short.MaxValue)。而check uncheck对整数的除零异常并无影响。
    2、浮点数的除零并不抛出异常(我估计你的a或则b是浮点数)。
      

  5.   

    其实你完全没必要用try
    因为异常机制是要消耗一定资源的,你用if解决更好。
    switch (d)
    {
    case '+': c = a + b; break;
    case '-': c = a - b; break;
    case '*': c = a * b; break;
    case '/': if(b==0){MessageBox.Show("除0错误");c=0;}
               else{ c = a / b; }
              break;
    }
      

  6.   

    [Quote=引用 5 楼 gomoku 的回复:]
    C#工程的默认设置是不抛出除零异常,溢出异常等。你可以在项目中改变设置,或,在代码中要求检查: 怎么改变设置啊?