ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 6장. 조건문이란?
    C++ 기본 문법 알아보기 2019. 1. 9. 11:58

    이번 글에서는 조건문에 대해서 배워보자.


    조건문에는 크게 if문, switch case문 두가지가 있는데, 이 두 조건문으로 프로그램의 흐름을 조절할 수 있다.



    if문


    먼저 if문에 대해서 배워보자.


    if문을 사용해서 미성년자인지 성인인지 구별하는 프로그램이다.


    #include <iostream>

    using namespace std;


    int main()

    {

    int age;


    age = 20;


    if (age <= 19)

    {

    cout << "미성년자입니다.\n";

    }

    else

    {

    cout << "성인입니다.\n";

    }


    return 0;

    }



    age의 값이 20이기 때문에 age <= 19는 false가 되기 때문에 "성인입니다"가 항상 출력된다.


    그리고 if문에는 else문이 필수는 아니기 때문에 없어도 상관은 없다.


    다음으로는 else if문을 알아보자.


    else if문은 if문 다음에 조건을 또 걸고 싶을 때 사용한다.


    예제를 보고 이해해보자.


    #include <iostream>

    using namespace std;


    int main()

    {

    int age;


    age = 19;


    if (age <= 18)

    cout << "미성년자입니다\n";

    else if (age == 19)

    cout << "조금만 있으면 성인입니다.\n";

    else

    cout << "성인입니다.\n";


    return 0;

    }



    만약 조건문 코드가 한 줄 이라면 이렇게 괄호를 생략해서 사용할 수 있다.


    한 if문에서 if와 else는 한 번씩 밖에 못 쓰지만 else if는 얼마든지 사용할 수 있다.


    else if를 분해해서 보면 다음과 같다.


    if ( age >= 20 )

    cout << "성인입니다.\n";

    else if ( female == true )

    cout << " 성인이 아니면서 여성입니다.\n";


    if ( age >= 20 )

    cout << "성인입니다.\n";

    else

    {

    if ( female == true )

    cout << " 성인이 아니면서 여성입니다.\n";

    }


    두 if문은 동일한 동작을 하고 있다.


    이제 전에 배웠던 논리 연산자를 통해 표현해보자.


    if ( age >= 20 )

    cout << "성인입니다.\n";


    if ( !(age >= 20) && female == true)

    cout << "성인이 아니면서 여성입니다.\n";


    세 if문 모두 동일한 동작은 한다.



    switch / case


    if문은 bool 타입의 입력을 받아서 true, false에 따라서 다른 코드를 실행해준다.


    switch / case문은 정수 타입의 입력을 받아서 그 값에 따라 다른 코드를 실행해준다.


    3점 만점의 시험에서 점수에 따라 다른 문장을 출력해주는 프로그램의 예제이다.


    #include <iostream>

    using namespace std;


    int main()

    {

    int score = 2;


    switch(score)

    {

    case 0:

    cout << "망했어요.\n";

    break;

    case 1:

    cout << "반도 못넘었어요.\n";

    break;

    case 2:

    cout << "좀 잘했네요.\n";

    break;

    case 3:

    cout << "훌륭합니다.\n";

    break;

    }

    return 0;

    }



    2점에 맞는 문장이 잘 출력된 것을 볼 수 있다.


    여기서 switch / case의 입력은 변수여야 하고 case 뒤에 오는 값은 무조건 상수여야 한다는 점을 기억하자.



    break


    그런데 여기서 case가 끝날 때마다 break; 라는 문장이 있다.


    break는 조건문이나 반복문에서 탈출할 때 쓰는 예약어이다.


    만약 break;를 쓰지 않으면 어떻게 될까?


    실험해보자.


    #include <iostream>

    using namespace std;


    int main()

    {

    int score = 2;


    switch(score)

    {

    case 0:

    cout << "망했어요.\n";

    case 1:

    cout << "반도 못넘었어요.\n";

    case 2:

    cout << "좀 잘했네요.\n";

    case 3:

    cout << "훌륭합니다.\n";

    }

    return 0;

    }



    case 2를 실행한 뒤 멈추지 않고 끝까지 실행한 것을 볼 수 있다.


    break문을 만나기 전까지, break가 없다면 switch / case 문 끝까지 실행한다.



    default


    그런데 만약 score에 0,1,2,3 이외의 값이 들어오면 어떻게 될까?


    이렇게 case에 없는 값을 처리해주기 위해 default가 존재한다.


    잘못된 입력 값이 들어왔을 때의 예제를 보자.


    #include <iostream>

    using namespace std;


    int main()

    {

    int score = 4;


    switch(score)

    {

    case 0:

    cout << "망했어요.\n";

    break;

    case 1:

    cout << "반도 못넘었어요.\n";

    break;

    case 2:

    cout << "좀 잘했네요.\n";

    break;

    case 3:

    cout << "훌륭합니다.\n";

    break;

    default:

    cout << "점수가 이상합니다.\n";

    }

    return 0;

    }



    여기서 만약 default 밑에 case가 더 있다면 break를 넣어주어야 하겠지만 일반적으로 default가 맨 밑에 위치하기 때문에 넣지 않았다.


    이제 case를 붙여서 사용해보자.


    score가 만점일 때만 다른 문장을 출력하는 예제이다.


    #include <iostream>

    using namespace std;


    int main()

    {

    int score = 1;


    switch(score)

    {

    case 0:

    case 1:

    case 2:

    cout << "좀 더 노력하세요.\n";

    break;

    case 3:

    cout << "훌륭합니다.\n";

    break;

    default:

    cout << "점수가 이상합니다.\n";

    }

    return 0;

    }



    0, 1, 2 모두 같은 결과가 나온다는 것을 알 수 있다.



    if? switch / case?


    앞의 예제를 보면 알겠지만 모든 switch / case문은 if문으로 변형이 가능하다.


    그렇다면 어떨 때에 어떤 조건문을 사용해야 할까?


    switch / case문은 한 변수가 있을 때 이 변수의 값에 따라서 서로 다른 일을 할 때 사용한다.


    그 외의 경우는 if문을 사용하면 된다.



    삼항 연산자


    if문을 사용한 간단한 예제가 있다.


    if (a > b)

    c = a;

    else 

    c = b;


    이 코드를 삼항 연산자를 사용하면 한 줄로 표현이 가능하다!


    c = a > b ? a : b;


    ? 앞에 조건이 오고 : 앞에 참일 때 실행할 코드, 뒤에는 거짓일 때 실행될 코드가 온다.


    훨씬 코드가 짧아지니 필요한 상황에 사용해보자!



    goto


    프로그램을 만들다 보면 이 코드의 위치로 뛰어넘어야 할 필요를 느낄 때가 있다.


    그럴 때 사용하는 명령어가 goto이다.


    긴말이 필요없다. 바로 예제를 보자.


    #include <iostream>

    using namespace std;


    int main()

    {

    goto Cppzoa;


    cout << "C++ 시러\n";


    Cppzoa:

    cout << "C++ 조아!\n";


    return 0;

    }



    잘 건너 뛴 것을 볼 수 있다.


    하지만 goto문을 남용하게 되면 소스 코드를 읽기 힘들어지고, 관리하기도 힘들어진다.


    goto를 적절히 사용해서 코드가 간결해지고 이해하기 쉬워지면 상관이 없지만 너무 많이 쓰진 말자.


    다음 글에서는 반복문에 대해서 배워보자.

    'C++ 기본 문법 알아보기' 카테고리의 다른 글

    8장. 배열에 대하여  (0) 2019.01.11
    7장. 반복문  (0) 2019.01.10
    5-2장. 비트 단위 연산자와 연산자 마무리  (0) 2019.01.08
    5-1장. 기본적인 연산자  (0) 2019.01.07
    4장. 형변환이란?  (0) 2019.01.06
Designed by Tistory.