文章目录
- [1 错误场景](#1 错误场景)
- [2 try catch 捕获异常](#2 try catch 捕获异常)
1 错误场景
c
using System;
//类型
//关键字
class Program
{
static void Main()
{
Console.WriteLine("请输入你的年龄:");
string age = Console.ReadLine();
int age2 = age + 10;//C#自动做str转换
Console.WriteLine("你的年龄是:" + age2);
Console.ReadKey(); //等待任意键输入,继续向下执行
}
}

c
Console.WriteLine("请输入你的年龄:");
string age = Console.ReadLine();
int age2 = int.Parse(age) + 10;//str转int需手动实现
Console.WriteLine("你的年龄是:" + age2);

数字字符串可以转int类型的年龄,
但是当用户 输入 字母等其他非法类型
的年龄时,程序无法进行 int转换,会报错,程序崩溃

2 try catch 捕获异常
可以用 try catch 捕获异常,避免程序崩溃
c
try
{
//将有可能出错的内容,写到try语句里;
//如果正确,正常执行,如果错误就会被catch抓取到,程序立马跳转到 catch,执行catch里面的内容
//try语句里 异常的下一句不会执行
}
catch
{
//如果try内部出错,错误就会被catch抓取到,程序立马跳转到 catch,执行catch里面的内容
//捕获到错误后,在这里可以做其他处理,避免程序崩溃
}
示例, 如果try内部出错,程序立马跳转到 catch,执行catch里面的内容return;
c
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(); //等待任意键输入,继续向下执行
}
上面存在一个问题,提示"请输入一个正确的年龄(必须是数字)"之后程序就结束了,用户信息并没有输入完毕;
下面改进: 如果输入非法,继续循环输入,直到输入正确为止
c
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 数据的合法年龄为止
c
catch
{
}
测试
c
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(); //等待任意键输入,继续向下执行
}
