黑马程序员——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) 标签: c#exception数学计算classsystemc 2011-10-24 18:45 30213人阅读 评论(4) ...
  • kasama1953
  • kasama1953
  • 2016年08月12日 00:19
  • 13785

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

转载自:http://blog.csdn.net/zevin/article/details/6901489 一、C#的异常处理所用到关键字 try 用于检查发生的异常,并帮助发送任何可能的异...
  • u013028876
  • u013028876
  • 2016年01月16日 16:55
  • 1859

关于C#try catch异常捕获语句一点需要注意的地方

在调用某函数时,如果使用了try catch语句捕获该函数产生的异常,而如果这个函数内调用了其它函数,其它函数又掉了另外的函数,如果这些被调用的函数中任意一个抛出了异常,而异常所在的代码块没有异常捕获...
  • qq_28768929
  • qq_28768929
  • 2016年09月08日 16:38
  • 3584

黑马程序员:初步接触try catch异常捕获机制

----------------------  ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------         在学习...
  • u012637010
  • u012637010
  • 2013年12月19日 17:25
  • 613

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

必读
  • XPY567
  • XPY567
  • 2016年07月01日 10:06
  • 324

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

C#中的异常捕获机制(try catch finally) //转自:http://blog.csdn.net/zevin/article/details/6901489 一、C#的异常...
  • call_from_dream
  • call_from_dream
  • 2015年05月29日 14:36
  • 313

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

转载自:http://blog.csdn.net/zevin/article/details/6901489 一、C#的异常处理所用到关键字 try 用于检查发生的异常,并帮助发送任何可能的异...
  • u013028876
  • u013028876
  • 2016年01月16日 16:55
  • 1859

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

C#中的异常捕获机制(try catch finally) 标签: c#exception数学计算classsystemc 2011-10-24 18:45 30213人阅读 评论(4) ...
  • kasama1953
  • kasama1953
  • 2016年08月12日 00:19
  • 13785

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

C#中的异常捕获机制(try catch finally) 一、C#的异常处理所用到关键字   try 用于检查发生的异常,并帮助发送任何可能的异常。   catch 以控制权更大的...
  • u011327981
  • u011327981
  • 2015年10月20日 19:19
  • 194

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

------- Windows Phone 7手机开发、.Net培训、期待与您交流! ------- 异常捕获机制 C#的异常处理所用到关键字   Try:用于检查发生的异常,并帮助发送...
  • feihong2011
  • feihong2011
  • 2013年04月19日 22:19
  • 250
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:黑马程序员——C#中的异常捕获机制try-catch
举报原因:
原因补充:

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