#29 [c++] 예외처리

정상준·2022년 12월 8일
0

c++

목록 보기
25/25

📝 오류의 원인

  • 컴파일 오류
    • 문법에 맞지 않는 코드 사용
    • 컴파일 과정에서 발견됨
    • 디버깅 난이도가 낮음
  • 논리적 오류
    • 개발자의 논리적 오류
    • 예외상황에 대한 미숙한 대처의 코드
    • 실행 결과가 예상과 다름
    • 디버깅 난이도가 높음

📝 예외처리

  • 예외란?
    • 실행 중, 프로그램 오동작이나 결과에 영향을 미치는 예상치 못한 상황 발생
  • 예외 처리기
    • 예외 발생을 탐지하고 예외를 처리하는 코드
      • 잘못된 결과, 비정상적인 실행, 시스템에 의한 강제 종료를 막음

📝 예외처리 형식

  • try-throw-catch
    • try{ } 블록
      • 예외가 발생할가능성이 있는 코드를 묶음
    • throw 문
      • 발견된 예외를 처리하기 위해, 예외 발생을 알리는 문장
      • try { } 블록 내에서 이루어져야함
    • catch() { } 블록
      • throw에 의해 발생한 예외를 처리하는 코드

📝 예외처리

#include <iostream>
#include <fstream>


using namespace std;

/*
합을 입력하세요>>15
인원수를 입력하세요>>5
평균 = 3
합을 입력하세요>>12
인원수를 입력하세요>>-3
예외 발생-3으로 나눌 수 없음
*/

int main() {
	int n, sum, average;
	while (true)
	{
		cout << "합을 입력하세요>>";
		cin >> sum;
		cout << "인원수를 입력하세요>>";
		cin >> n;
		
		try {
			if (n <= 0)
				throw n;
			else
				average = sum / n;
		}
		catch (int x) {
			cout << "예외 발생" << x << "으로 나눌 수 없음" << endl;
			average = 0;
			cout << endl;
			continue;
		}
		cout << "평균 = " << average << endl;
	}
	
}

📝 예외처리

#include <iostream>
#include <cstring>


using namespace std;

/*
123
1A2처리에서 예외 발생
*/

int stringToInt(const char x[]) {
	int sum = 0;
	int len = strlen(x);
	for (int i = 0; i < len; i++) {
		if (x[i] >= '0' && x[i] <= '9') {
			sum = sum * 10 + x[i] - '0';
		}
		else
			throw x;
	}
	return sum;
}

int main() {
	int n;
	try {
		n = stringToInt("123");
		cout << n << endl;
		n = stringToInt("1A2");
		cout << n << endl;
	}
	catch (const char* s) {
		cout << s << "처리에서 예외 발생" << endl;
		return 0;
	}
	
}
profile
안드로이드개발자

0개의 댓글