Khối lệnh 'try' và 'catch'
Thuộc phần Logic và luồng chương trình trong hành trình C++ của Coddy. Bài học 49 trên 56.
Các khối try và catch phối hợp với nhau để tạo lớp bảo vệ cho đoạn code của bạn. Bạn đặt code có thể gây rủi ro bên trong khối try. Nếu xảy ra ngoại lệ, chương trình chuyển đến khối catch tương ứng để xử lý lỗi một cách nhẹ nhàng.
Đây là cấu trúc cú pháp cơ bản:
try {
// Đoạn code có thể gây ra ngoại lệ (exception)
} catch (exception_type e) {
// Đoạn code xử lý ngoại lệ
}Một ví dụ thực tế là chuyển chuỗi thành số bằng std::stoi. Hàm này có thể ném ra ngoại lệ std::invalid_argument nếu chuỗi chứa ký tự không phải số:
try {
std::string input = "abc";
int number = std::stoi(input); // Lệnh này sẽ phát sinh ngoại lệ (exception)
std::cout << "Number: " << number << std::endl;
} catch (std::invalid_argument& e) {
std::cout << "Invalid input! Please enter a valid number." << std::endl;
}Khi ngoại lệ xảy ra trong khối try, chương trình lập tức ngừng chạy phần code còn lại trong khối đó và chuyển đến khối catch. Cách này giúp chương trình không bị sập và cho phép bạn đưa ra phản hồi hữu ích cho người dùng khi có sự cố.
Thử thách
DễTạo một chương trình minh họa cách chuyển đổi chuỗi thành số an toàn bằng các khối try và catch. Thử thách này sẽ kiểm tra mức độ hiểu của bạn về cách xử lý ngoại lệ xảy ra khi chuyển đầu vào của người dùng từ chuỗi sang số nguyên.
Chương trình sẽ nhận đầu vào sau:
- Một chuỗi
userInputcó thể biểu thị hoặc không biểu thị một số nguyên hợp lệ
Chương trình của bạn cần:
- Đặt thao tác chuyển đổi chuỗi thành số nguyên bên trong khối
trybằngstd::stoi - Nếu chuyển đổi thành công, in số đã chuyển đổi cùng thông báo thành công
- Dùng khối
catchđể xử lý ngoại lệstd::invalid_argumentxảy ra khi chuỗi chứa ký tự không phải số - Trong khối catch, in thông báo lỗi cho biết đầu vào không hợp lệ
Dùng định dạng đầu ra chính xác sau:
Khi chuyển đổi thành công:
Valid number: [converted_number]Khi đầu vào không hợp lệ và gây ra ngoại lệ:
Error: Invalid inputHãy nhớ rằng std::stoi sẽ gây ra ngoại lệ std::invalid_argument khi gặp chuỗi không thể chuyển đổi thành số nguyên. Khối try cần chứa thao tác chuyển đổi, còn khối catch cần chỉ rõ kiểu ngoại lệ là std::invalid_argument& để xử lý lỗi cụ thể này. Khi xảy ra ngoại lệ, chương trình sẽ lập tức chuyển từ khối try sang khối catch tương ứng, giúp chương trình không bị lỗi.
Tự làm thử
#include <iostream>
#include <string>
using namespace std;
int main() {
// Đọc đầu vào
string userInput;
cin >> userInput;
// TODO: Viết code bên dưới
// Dùng các khối try-catch với std::stoi để chuyển đổi chuỗi
return 0;
}Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Logic và luồng chương trình
1Con trỏ và bộ nhớ
Con trỏ là gì?Toán tử lấy địa chỉToán tử giải tham chiếuCon trỏ nullCon trỏ và mảngBộ nhớ động với newGiải phóng bộ nhớ với deleteÔn tập: luyện tập về con trỏ2Vector (mảng động)
Giới thiệu std::vectorTạo vectorThêm phần tửTruy cập phần tửKích thước vectorDuyệt bằng vòng lặp forVòng lặp for dựa trên phạm viXóa phần tửÔn tập: các thao tác với vector5Dự án: Công cụ quản lý hàng tồn kho
Thiết lập dự ánThêm và cập nhật mặt hàng8Xử lý lỗi cơ bản
Giới thiệu về ngoại lệKhối lệnh 'try' và 'catch'Từ khóa 'throw'Các kiểu ngoại lệ khác nhauBộ xử lý bắt mọi ngoại lệÔn tập: phép chia an toàn3Dự án: Công cụ danh sách công việc
Tổng quan dự ánThêm công việc6Tập hợp (các phần tử duy nhất)
Giới thiệu std::setTạo tập hợp và thêm phần tửKiểm tra phần tửXóa phần tửDuyệt qua tập hợpÔn tập: các số duy nhấtTự luyện tập: Trình biên dịch C++ online