c++ 예외처리

한정화·2023년 4월 15일
0

#230415 토

1. try~catch

(1) 사용 방법

#include <iostream>
using namespace std;

int main() {
	while (1) {
		int a, b;
		cout << "분자를 입력하세요: "; cin >> a;
		cout << "분모를 입력하세요: "; cin >> b;

		try {  //try 블록은 예외가 발생할 수 있는 코드들을 감싸고 있다. 
			if (b == 0) throw b;  //throw문은 예외 값을 catch문의 input으로 던진다(?)
			cout << "결과: " << a / b<<'\n';
		}

		catch (int err) {  //catch 블록은 예외 값을 받아 예외를 처리한다. 
			cout << err << "으로 나눌 수 없습니다.\n"; 
		}
	}
}

(2) 문자열 예외 값 던지기

#include <iostream>
using namespace std;

int main() {
	cout << "자료의 평균 구하기\n";

	int num; 
	int sum = 0;
	cout << "자료의 개수 입력: "; cin >> num;

	try {
		if (num == 0) {
			throw "0으로 나눌 수 없습니다.";
		}

		else if (num < 0) {
			throw "음수로 나눌 수 없습니다. ";
		}

		else {
			for (int i = 0; i < num; i++) {
				int tmp;
				cout << i + 1 << "번째 데이터 : "; cin >> tmp;
				sum += tmp;
			}
			cout << "평균은 " << sum / num << "입니다.\n";
		}
	}

	catch (const char* s) {
		cout << s; 
	}
}

(3) 함수에서 예외값 던지기

#include <iostream>
#include <string>
using namespace std;

string ToUpperCase(string s) {
	for (int i = 0; i < s.length(); i++) {
		if(!(s[i] >= 'A' && s[i] <= 'Z') || !(s[i] >= 'a' && s[i] <= 'z')) {
			throw s[i];
		}

		else if ((s[i] >= 'A' && s[i] <= 'Z')) {
			s[i] -= 'a' - 'A';
		}
	}
	return s;
}

int main() {
	cout << "[Test1]";
	string s1 = "happy";
	try {
		cout << ToUpperCase(s1) << endl;
	}
	catch (const char* c) {
		cout<<c<<"는 소문자가 아닙니다. 변환 불가!" << '\n';
	}

	cout << "[Test2]";
	string s2 = "love!";
	try {
		cout << ToUpperCase(s2) << endl;
	}
	catch (const char* c) {
		cout << c << "는 소문자가 아닙니다. 변환 불가!" << '\n';
	}
}

0개의 댓글