It won't hurt to try

[C++/윈도우프로그래밍응용]22. 예외 처리 본문

C++/윈도우프로그래밍응용

[C++/윈도우프로그래밍응용]22. 예외 처리

yongki.doki 2021. 10. 30. 11:08

예외 처리

예외적인 상황에 의하여 발생한 오류에 대한 처리

  • 세상에 완벽한 프로그램은 없음
  • 잘못된 코드, 부정확한 데이터, 예외적 상황에 의해 오류(error)가 발생할 때 처리하기 위한 구조가 필요
  • C++ 언어에서는 예외(exception)을 처리하기 위한 예외 처리(exception handling) 방법을 제공

 

try~catch문

try{
  // 예외가 발생할 수 있는 코드
  if (<예외 발생 조건>)
    throw exception;
} catch (<예외 타입> <매개변수명>) {
  // 예외를 처리하는 코드
} catch (...) {
  // 구체적이지 않은 (범용) 예외를 처리하는 코드
}
try {
  int num;
  cout << "점수를 입력하세요 : " << endl;
  cin >> num;
  
  if(num > 100 || num < 0)
    throw num;
    
  cout << "입력한 점수는" << num << "점입니다." << endl;
} catch(int num) {
  if(num>100) << cout << "점수는 100점을 얻었습니다."
  if(num<0) << cout << "점수는 음수가 될 수 없습니다."
  cout << endl;
  exit(1);
}

평균과 합계를 구하는 프로그램

#include <iostream>

using namespace std;

int main()
{
    try {
        int sum = 0, num = 0, count = 0;
        float average = 0;

        cout << "개수 ? (1 이상)";
        cin >> count;

        if ( count < 1 ) throw 1;

        for(int i=0; i<count; i++) {
            cout << "숫자? (0~100) ";
            cin >> num;

            if(num < 0) throw 2;
            if(num > 100) throw 3;

            sum += num;
        }
        average = sum /count;

        cout << "합계 : " << sum << endl;
        cout << "평균 : " << average << endl;
    } catch (int num) {
        cerr << "ERROR : ";
        switch(num) {
            case 1:
                cerr << "개수가 1 미만"; break;
            case 2:
                cerr << "개수가 0 미만"; break;
            case 3:
                cerr << "숫자가 100 초과"; break;
            default:
                cerr << "알 수 없는 오류"; break;
        }
        cerr << endl;
    } catch (...) {
        cerr << "FATAL ERROR : 알 수 없는 시스템 오류" << endl;
    }

    return 0;
}
300x250
300x250
Comments