“try”和“catch”块
本课属于 Coddy C++ 学习旅程的“逻辑与流程”单元。第 49 课,共 56 课。
try 和 catch 代码块协同工作,为你的代码提供保护。你可以将可能有风险的代码放在 try 代码块中。如果发生异常,程序就会跳转到对应的 catch 代码块,以妥善处理错误。
下面是基本语法结构:
try {
// 可能抛出异常的代码
} catch (exception_type e) {
// 处理异常的代码
}一个实用示例是使用 std::stoi 将字符串转换为数字。如果字符串中包含非数字字符,就可能抛出 std::invalid_argument 异常:
try {
std::string input = "abc";
int number = std::stoi(input); // 这会抛出异常
std::cout << "Number: " << number << std::endl;
} catch (std::invalid_argument& e) {
std::cout << "Invalid input! Please enter a valid number." << std::endl;
}当 try 块中发生异常时,程序会立即停止执行该块中剩余的代码,并跳转到 catch 块。这样可以防止程序崩溃,并让你在出现问题时向用户提供有用的反馈。
挑战
简单创建一个程序,演示如何使用 try 和 catch 块安全地将字符串转换为数字。这个挑战将测试你对如何处理将用户输入从字符串转换为整数时发生的异常的理解。
将提供以下输入:
- 一个字符串
userInput,它可能是有效整数,也可能不是
你的程序应该:
- 使用
std::stoi,将字符串到整数的转换放在try块中 - 如果转换成功,打印转换后的数字和一条成功消息
- 使用
catch块处理字符串包含非数字字符时发生的std::invalid_argument异常 - 在 catch 块中打印一条错误消息,说明输入无效
使用以下确切的输出格式:
转换成功时:
Valid number: [converted_number]输入无效并引发异常时:
Error: Invalid input请记住,std::stoi 遇到无法转换为整数的字符串时会引发 std::invalid_argument 异常。try 块应包含转换尝试,catch 块应指定异常类型 std::invalid_argument&,以处理这种特定错误。发生异常时,程序会立即从 try 块跳转到匹配的 catch 块,从而避免程序崩溃。
亲手试试
#include <iostream>
#include <string>
using namespace std;
int main() {
// 读取输入
string userInput;
cin >> userInput;
// TODO: 在下方编写你的代码
// 使用 try-catch 代码块和 std::stoi 转换字符串
return 0;
}这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: C++ 在线编译器