第五节 · 缓兵之计 · 异常处理语句
int divide(int a, int b)
{
return a / b;
}int divide(int a, int b)
{
if (b == 0)
{
cout << "错误:除数不能为零!" << endl;
return 0; // 返回一个默认值
}
return a / b;
}异常类
说明
习题
Last updated
int divide(int a, int b)
{
return a / b;
}int divide(int a, int b)
{
if (b == 0)
{
cout << "错误:除数不能为零!" << endl;
return 0; // 返回一个默认值
}
return a / b;
}Last updated
int divide(int a, int b)
{
if (b == 0)
{
throw "除数不能为零!"; // 抛出异常
}
return a / b;
}
int main()
{
try
{
int result = divide(10, 0); // 这里会抛出异常
cout << "结果: " << result << endl;
}
catch (const char* msg)
{
cout << "捕获到异常: " << msg << endl;
}
cout << "程序继续执行..." << endl;
return 0;
}捕获到异常: 除数不能为零!
程序继续执行...throw 42; // 抛出一个整数
throw "出错了!"; // 抛出一个 C 风格字符串
throw 3.14; // 抛出一个浮点数
throw MyException(); // 抛出一个自定义异常对象try
{
// 可能产生异常的代码
riskyOperation();
}catch (异常类型 变量名)
{
// 处理异常的代码
}try
{
// 可能产生异常的代码
}
catch (int e)
{
cout << "捕获到整数异常: " << e << endl;
}
catch (const char* e)
{
cout << "捕获到字符串异常: " << e << endl;
}
catch (...) // 捕获所有类型的异常
{
cout << "捕获到未知类型的异常" << endl;
}#include <iostream>
#include <stdexcept>
using namespace std;
int divide(int a, int b)
{
if (b == 0)
{
throw invalid_argument("除数不能为零");
}
return a / b;
}
int main()
{
try
{
int result = divide(10, 0);
}
catch (const invalid_argument& e)
{
cout << "无效参数: " << e.what() << endl;
}
catch (const exception& e)
{
cout << "异常: " << e.what() << endl;
}
return 0;
}#include <iostream>
#include <string>
#include <stdexcept>
using namespace std;
int getInteger(const string& prompt)
{
cout << prompt;
int value;
cin >> value;
if (cin.fail())
{
cin.clear(); // 清除错误标志
cin.ignore(1000, '\n'); // 忽略错误输入
throw invalid_argument("请输入一个有效的整数");
}
return value;
}
int main()
{
while (true)
{
try
{
int num = getInteger("请输入一个整数: ");
cout << "你输入的是: " << num << endl;
break; // 输入成功,退出循环
}
catch (const invalid_argument& e)
{
cout << "错误: " << e.what() << ",请重新输入。" << endl;
}
}
return 0;
}