C++/기초를 탄탄히 세워주는 C++ 프로그래밍 입문(황준하 저)

기초를 탄탄히 세워주는 C++ 프로그래밍 입문 14장 연습문제

꾸준함. 2017. 7. 16. 13:55

[14.1]

/*

사용자로부터 1부터 10까지의 정수 중 하나를 입력받고 제곱값을 출력하려고 한다.

사용자가 이 범위를 벗어난 정수값을 입력할 경우, 예외 처리를 통해 잘못 입력하였음을 알리도록 한다

*/

#include <iostream>

using namespace std;

 

int main(void)

{

        int num;

 

        cout << "1개의 정수 입력(1~9): ";

        cin >> num;

 

        try

        {

               if (num < 0 || num>9)

                       throw num;

 

               cout << "제곱값: " << num*num << endl;

        }

        catch (int num)

        {

               cout << num << "을 입력하셨네요! 잘못 입력하셨습니다" << endl;

        }

        return 0;

}

[14.2]

/*

연습문제 14.1에서 예외 상황이 발생했을 경우 예외처리를 한 후에 재입력을 요구하도록 한다

*/

#include <iostream>

using namespace std;

 

int main(void)

{

        int num;

 

start:

        cout << "1개의 정수 입력(1~9): ";

        cin >> num;

 

        try

        {

               if (num < 1 || num > 9)

                       throw num;

 

               cout << "제곱값: " << num*num << endl;

        }

        catch (int num)

        {

               cout << num << "을 입력하셨네요! 잘못 입력하셨습니다" << endl;

               cout << "다시 입력해주세요." << endl;

               goto start;

        }

        return 0;

}

 

[14.3]

/*

예제 14.5에서 catch(...) 블록이 수행될 수 있도록 예외를 발생시켜 본다.

int, double형이 아닌 다른 값으로 throw 문을 수행하면 된다

*/

#include <iostream>

using namespace std;

 

int main(void)

{

        int x, y;

 

        cout << "2개의 정수 입력: ";

        cin >> x >> y;;

 

        try

        {

               if (y == 0)

                       throw 1;

 

               if (x <= 0 || y <= 0)

                       throw 1.0;

 

               if (x > 1 && y > 1)

                       throw "예외";

 

               cout << "+: " << x + y << endl;

               cout << "-: " << x - y << endl;

               cout << "*: " << x*y << endl;

               cout << "/: " << x / y << endl;

        }

        catch (int a) //예외 처리 핸들러:int

        {

               cout << "0으로 나눌 수는 없습니다" << endl;

        }

        catch (double a) //예외 처리 핸들러:double

        {

               cout << "x y는 음수가 될 수 없습니다" << endl;

        }

        catch (...) //예외 처리핸들러:모든 타입

        {

               cout << "모든 throw문을 수용할 수 있는 예외처리 핸들러입니다" << endl;

        }

 

        cout << "사칙연산 종료" << endl;

 

        return 0;

}

[14.4]

/*

CPoint 클래스는 좌표값으로 0 또는 양수만을 수용할 수 있다.

CPoint 객체 하나를 만들고 사용자로부터 좌표를 읽어 들일 수 있도록 >> 연산자를 오버로딩한다.

그리고 >> 연산자 내에서 원하는 값(0 이상)이 입력되지 못할 경우 예외를 발생시켜 본다.

CPoint 클래스를 사용하는 main 함수에서는 예외 발생 시 이 예외를 처리할 수 있어야 한다.

*/

#include <iostream>

using namespace std;

 

class CPoint

{

private:

        int x;

        int y;

public:

        CPoint(int a = 0, int b = 0) :x(a), y(b)

        {

        }

        void Print()

        {

               cout << "입력하신 좌표값: ";

               cout << "(" << x << ", " << y << ")" << endl;

        }

        friend istream &operator>>(istream &is, CPoint &Co);

};

 

istream &operator>>(istream &is, CPoint &Co)

{

        cout << "좌표 입력:(x, y 둘 다 0 이상): ";

        is >> Co.x >> Co.y;

 

        if (Co.x < 0 || Co.y < 0)

               throw CPoint();

        return is;

}

 

int main(void)

{

        try

        {

               cout << "좌표값 입력: ";

               CPoint Co;

               cin >> Co;

               Co.Print();

        }

        catch (CPoint &Co)

        {

               cout << "좌표 값은 x y 둘다 0 이상 입력하시길 바랍니다" << endl;

        }

       

        return 0;

}


개발 환경:Visual Studio 2017


지적, 조언, 질문 환영입니다! 댓글 남겨주세요~


[참고] 기초를 탄탄히 세워주는 C++ 프로그래밍 입문 황준하 저

반응형