Menu
CoddyTech

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ố.

challenge icon

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 userInput có 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:

  1. Đặt thao tác chuyển đổi chuỗi thành số nguyên bên trong khối try bằng std::stoi
  2. Nếu chuyển đổi thành công, in số đã chuyển đổi cùng thông báo thành công
  3. Dùng khối catch để xử lý ngoại lệ std::invalid_argument xảy ra khi chuỗi chứa ký tự không phải số
  4. 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 input

Hã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;
}
quiz iconTự kiểm tra

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

Tự luyện tập: Trình biên dịch C++ online