黑马程序员——C#中的异常捕获机制try-catch

原创 2012年03月28日 23:14:12
---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ----------------------

  因为学过C语言的关系,再看C#基础这块,觉得和C语言大同小异,数据类型、运算符、表达式基本上是一致的,还有三种程序结构:顺序结构、选择结构、循环结构以及这三种结构的语句、语法可以说是完全一样的。不过因为已经有三年多时间没有接触C语言了,所以我还是从头把C#基础给看了一遍,不然肯定会有很多东西丢掉的。

  看到异常捕获机制try-catch这块的时候,我感觉到和C语言终于有了明显差异的地方了,没记错的话,当初学C语言时,没有这个异常捕获机制的,也就是好像从没有考虑过用户输入有误的情况下如何处理。当时写C语言程序时,都是用scanf()、printf()函数来达到输入、输出功能,它们的形式是scanf(格式控制,地址表列)、printf(格式控制,地址表列),例:

        #include<stdio>
        void main()
        {
           int a,b,c;
           scanf("%d%d%d",&a,&b,&c);
           printf("%d,%d,%d",a,b,c);
        }

  运行时会等待让用户输入三个变量的值,然后再输出这三个变量的值。

  可以看到scanf()、printf()函数和C#中的Console.ReadLine()、Console.WriteLine()方法很类似。不过scanf()函数中直接指明输入的格式和输入内容赋给哪些变量。至于用户若不按照指明的输入格式来输入的话会出如何,当初学的时候并没有讲到,书中也没有提过怎么处理这个问题,只是说会出现错误,因此一直到现在也没有考虑过这个情况,现在看到C#中说到异常捕获机制才想起会有这种情况发生,而且还是很容易发生的。因此异常捕获机制应该是必须有的啊,可能当初学的是皮毛,没有涉及到这个内容。

  现在就来看一下C#中的异常捕获机制是如何运作的吧:

  try-catch即为异常捕获机制的语句,它的语法如下:

    try
    {
       //有可能出现错误的代码;
    }
    catch
    {
       //出错后的处理;
    }

  这样就可以将这个语句用在用户输入有误导致异常的情况下了。

  在C#中用户输入的内容都是作为字符串来处理的,所以要想得到一个数字,就必须先进行类型转换。常用的方法是:Convert.ToInt32(Console.ReadLine());就是把用户输入的内容转换为int类型的数据,通常再用一个变量接收转换后的值。可是当用户输入出现不能转换的内容时,如用户输入了不是数字的字符,编译时就会出错!这时我们就可以用try-catch这个异常捕获机制来解决这个问题了。现通过学习中的练习题来看一下try-catch的使用:

  让用户输入班级的人数以及每个人的成绩,求平均成绩和总成绩。

        static void Main(string[] args)
        {            
            int i = 0;
            int score = 0;
            int sum = 0;
            int avg;
            Console.WriteLine("请输入班级人数");
            int n = Convert.ToInt32(Console.ReadLine());//定义变量n接收用户输入的班级人数
            while (i < n)//循环输入班级学员的成绩
            {
                Console.WriteLine("输入第{0}个学员成绩", i + 1);
                score = Convert.ToInt32(Console.ReadLine());
                sum += score;//计算总成绩
                i++;
            }
            avg = sum / n;//计算平均成绩
            Console.WriteLine("班级学员的平均成绩为:{0},总成绩为:{1}", avg, sum);

            Console.ReadKey();
        }

  上面的程序是没有考虑用户输入有误的情况。当用户输入有误时,编译就会出错!如下图:


  要避免出现这样的情况就要用到try-catch了,本题中有两处涉及到用户输入数字的地方,所以改进后的代码如下:

        static void Main(string[] args)
        {
            int i = 0,n = 0,score = 0,sum = 0;
            int avg;
            bool flag = true;//设置一个标识符
            Console.WriteLine("请输入班级人数");
            while (flag)
            {
                try
                {
                    n = Convert.ToInt32(Console.ReadLine());//定义变量n接收用户输入的班级人数
                    flag = false;//输入正确后改变标识符的值,跳出循环
                }
                catch
                {
                    Console.WriteLine("你输入的不是数字,请重新输入!");//输入不是数字,则循环让用户重新输入
                }
            }
            while (i < n)//循环输入班级学员的成绩
            {
                try
                {
                    Console.WriteLine("输入第{0}个学员成绩", i + 1);
                    score = Convert.ToInt32(Console.ReadLine());
                    sum += score;//计算总成绩
                    i++;
                }
                catch
                {
                    Console.WriteLine("你输入的不是数字,请重新输入!");//输入不是数字,则循环让用户重新输入

                }
            }

            avg = sum / n;//计算平均成绩
            Console.WriteLine("班级学员的平均成绩为:{0},总成绩为:{1}", avg, sum);

            Console.ReadKey();
        }

  这样改动后,通过在循环中使用try-catch语句,可以达到当用户输入有误时就会直接在程序中提醒用户,并要求用户重新输入,直到输入正确的功能。

  可见用try-catch这个异常捕获机制来应对用户输入有误的情况还是很有用处的,当然这只是自己对try-catch的一点见解,不够透彻、不够全面,后面可能会接触到try-catch更全面、更深入的用途,到时肯定会有另一番领悟的。

---------------------- Windows Phone 7手机开发.Net培训、期待与您交流!----------------------详细请查看:http://net.itheima.com/

相关文章推荐

C#中的异常捕获机制(try catch finally)

C#中的异常捕获机制(try catch finally) //转自:http://blog.csdn.net/zevin/article/details/6901489 一、C#的异常...

黑马程序员--异常捕获机制

------- Windows Phone 7手机开发、.Net培训、期待与您交流! ------- 异常捕获机制 C#的异常处理所用到关键字   Try:用于检查发生的异常,并帮助发送...

C# 中异常抛出捕获机制--throw / try,catch,finally

[转自:http://www.cnblogs.com/ammy714926/p/4397861.html] try{ messagebox.show("true"); } catch { mes...

黑马程序员之C#学习笔记:异常捕获try-catch

全面try-catch-finally外加throw的用法 一、作用:用于开发人员预测程序代码异常、捕获这些异常、处理这些异常。异常可能 是算术异常、下标越界、输入输出异常等等。 二、基本结构...

黑马程序员——Java中的异常:关键字try...catch、throw、throws总结

------- android培训、java培训、期待与您交流! ---------- 异常和java异常处理机制         在程序的实际应用中,可能存在大量的未知问题,所以...

从源码角度分析Android系统的异常捕获机制是如何运行的

我们在开发的时候经常会遇到各种异常,当程序遇到异常,便会将异常信息抛到LogCat中,那这个过程是怎么实现的呢? 我们以一个例子开始: import android.app.Activity; i...

Android全局异常捕获机制

安卓异常整体解决方案,从异常捕获、到异常日志写入、到异常上报等。。

spring MVC异常捕获机制

spring MVC异常捕获机制spring MVC 提供了异常捕获机制 org.springframework.web.servlet.handler.SimpleMappingExceptionR...

异常捕获机制中的return

查了很多资料,大家对于java中异常捕获机制的return说法很多,下面总结自己一些遇到的情况 1.finally中没有return如下 public class Test{ publi...

【黑马程序员】C#之try、catch觉得不错给大家看看!

C#中try catch finally 用法 C#中try catch finally 用法  1、将预见可能引发异常的代码包含在try语句块中。  2、如果发生了异常,则转入catch的执行。c...
  • A866565
  • A866565
  • 2013年10月04日 21:56
  • 1458
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:黑马程序员——C#中的异常捕获机制try-catch
举报原因:
原因补充:

(最多只允许输入30个字)