📝 오류의 원인
- 컴파일 오류
- 문법에 맞지 않는 코드 사용
- 컴파일 과정에서 발견됨
- 디버깅 난이도가 낮음
- 논리적 오류
- 개발자의 논리적 오류
- 예외상황에 대한 미숙한 대처의 코드
- 실행 결과가 예상과 다름
- 디버깅 난이도가 높음
📝 예외처리
- 예외란?
- 실행 중, 프로그램 오동작이나 결과에 영향을 미치는 예상치 못한 상황 발생
- 예외 처리기
- 예외 발생을 탐지하고 예외를 처리하는 코드
- 잘못된 결과, 비정상적인 실행, 시스템에 의한 강제 종료를 막음
📝 예외처리 형식
- try-throw-catch
- try{ } 블록
- throw 문
- 발견된 예외를 처리하기 위해, 예외 발생을 알리는 문장
- try { } 블록 내에서 이루어져야함
- catch() { } 블록
- throw에 의해 발생한 예외를 처리하는 코드
📝 예외처리
#include <iostream>
#include <fstream>
using namespace std;
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;
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;
}
}