【04】C#入门到精通——C# 程序错误处理, try catch 捕获异常,避免程序崩溃
文章目录
- 1 错误场景
- 2 try catch 捕获异常
1 错误场景
using System;
//类型
//关键字
class Program
{static void Main(){Console.WriteLine("请输入你的年龄:");string age = Console.ReadLine();int age2 = age + 10;//C#自动做str转换Console.WriteLine("你的年龄是:" + age2);Console.ReadKey(); //等待任意键输入,继续向下执行}
}
Console.WriteLine("请输入你的年龄:");string age = Console.ReadLine();int age2 = int.Parse(age) + 10;//str转int需手动实现Console.WriteLine("你的年龄是:" + age2);
数字字符串可以转int类型的年龄,
但是当用户 输入 字母等其他非法类型
的年龄时,程序无法进行 int转换,会报错,程序崩溃
2 try catch 捕获异常
可以用 try catch 捕获异常,避免程序崩溃
try{//将有可能出错的内容,写到try语句里;//如果正确,正常执行,如果错误就会被catch抓取到,程序立马跳转到 catch,执行catch里面的内容//try语句里 异常的下一句不会执行}catch{//如果try内部出错,错误就会被catch抓取到,程序立马跳转到 catch,执行catch里面的内容//捕获到错误后,在这里可以做其他处理,避免程序崩溃}
示例, 如果try内部出错,程序立马跳转到 catch,执行catch里面的内容return;
static void Main()
{Console.WriteLine("请输入你的年龄:");string str = Console.ReadLine();int age = 0;try{//将有可能出错的内容,写到try语句里;//如果正确,正常执行,如果错误就会被catch抓取到,程序立马跳转到 catch,执行catch里面的内容age = int.Parse(str);//如果异常,下面一句不会执行,程序立马跳转到 catch,}catch{//如果try内部出错,错误就会被catch抓取到,那么就执行catch里面的内容Console.WriteLine("请输入一个正确的年龄(必须是数字)");return;//程序提前结束,下面的不会在执行;(当然这里可以做其他处理)}age = age + 10;Console.WriteLine("你10年后的年龄是:" + age);Console.ReadKey(); //等待任意键输入,继续向下执行
}
上面存在一个问题,提示"请输入一个正确的年龄(必须是数字)"之后程序就结束了,用户信息并没有输入完毕;
下面改进:如果输入非法,继续循环输入,直到输入正确为止
static void Main(){bool isCheck = true;int age = 0;while (isCheck){Console.WriteLine("请输入你的年龄:");string str = Console.ReadLine();try{//将有可能出错的内容,写到try语句里;//如果正确,正常执行,如果错误就会被catch抓取到,程序立马跳转到 catch,执行catch里面的内容age = int.Parse(str);//如果异常,下面一句不会执行,程序立马跳转到 catch,isCheck = false;//如果上一句异常,这一句不会执行;只有正常才会执行此句,用户输入结束}catch{//如果try内部出错,错误就会被catch抓取到,程序立马跳转到 catch,执行catch里面的内容Console.WriteLine("请输入一个正确的年龄(必须是数字)");isCheck = true;//如果输入非法,继续循环输入}}age = age + 10;Console.WriteLine("你10年后的年龄是:" + age);Console.ReadKey(); //等待任意键输入,继续向下执行}
catch里面可以什么都不写,
因为,只有输入正确 try 里面的 isCheck = false;才会被执行
,此时输入循环结束;
否则错误时,循环条件中一直为真,就一直循环输入,直到输入一个 可以转换为 int 数据的合法年龄为止
catch
{
}
测试
static void Main()
{bool isCheck = true;int age = 0;while (isCheck){Console.WriteLine("请输入你的年龄:");string str = Console.ReadLine();try{//将有可能出错的内容,写到try语句里;//如果正确,正常执行,如果错误就会被catch抓取到,那么就执行catch里面的内容age = int.Parse(str);//如果异常,下面一句不会执行,程序立马跳转到 catch,isCheck = false;//如果上一句异常,这一句不会执行;只有正常才会执行此句,用户输入结束}catch{}}age = age + 10;Console.WriteLine("你10年后的年龄是:" + age);Console.ReadKey(); //等待任意键输入,继续向下执行
}