'try'와 'catch' 블록
Coddy C++ 여정의 로직과 흐름 섹션에 포함된 레슨 — 56개 중 49번째.
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블록 안에 배치합니다.- 변환에 성공하면 성공 메시지와 함께 변환된 숫자를 출력합니다.
- 문자열에 숫자가 아닌 문자가 포함되어 있을 때 발생하는
std::invalid_argument예외를 처리하기 위해catch블록을 사용합니다. - catch 블록에서 입력이 유효하지 않음을 나타내는 에러 메시지를 출력합니다.
다음과 같은 정확한 출력 형식을 사용하세요:
성공적인 변환의 경우:
Valid number: [converted_number]예외를 발생시키는 유효하지 않은 입력의 경우:
Error: Invalid inputstd::stoi는 정수로 변환할 수 없는 문자열을 만났을 때 std::invalid_argument 예외를 발생시킨다는 점을 기억하세요. try 블록은 변환 시도를 포함해야 하며, catch 블록은 이 특정 에러를 처리하기 위해 예외 타입을 std::invalid_argument&로 지정해야 합니다. 예외가 발생하면 프로그램은 즉시 try 블록에서 일치하는 catch 블록으로 점프하여 프로그램이 비정상 종료되는 것을 방지합니다.
치트 시트
예외를 안전하게 처리하려면 try와 catch 블록을 사용하세요:
try {
// 예외가 발생할 수 있는 코드
} catch (exception_type e) {
// 예외를 처리하는 코드
}std::stoi 문자열-정수 변환을 사용한 예시입니다:
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 블록으로 이동하여, 충돌을 방지하고 원활한 오류 처리를 가능하게 합니다.
직접 해보기
#include <iostream>
#include <string>
using namespace std;
int main() {
// 입력 읽기
string userInput;
cin >> userInput;
// TODO: 아래에 코드를 작성하세요
// 문자열을 변환하려면 std::stoi와 함께 try-catch 블록을 사용하세요
return 0;
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.