소년코딩

06.01 - if 조건문 (if conditional statement)

C++에서 가장 기본적인 조건문은 if 명령문이다. (if statement)

if (expression)  // conditional expression
    statement

or

if (expression)  // conditional expression
    statement
else
    statement2

위에서 'expression'을 조건식(conditional expression)이라고 한다. 조건식이 true(0이 아님)로 평가되면 if 문이 실행된다. 표현식이 false로 평가되면 else 문이 실행된다(else 문이 있는 경우).

#include <iostream>

int main()
{
    std::cout << "Enter a number: ";
    int x;
    std::cin >> x;

    if (x > 10)
        std::cout << x << "is greater than 10\n";
    else
        std::cout << x << "is not greater than 10\n";

    return 0;
}

여러 개의 명령문 실행 (Executing multiple statements)

여러 개의 명령문을 실행하기 위해 블록(block)을 사용할 수 있다.

#include <iostream>

int main()
{
    std::cout << "Enter a number: ";
    int x;
    std::cin >> x;

    if (x > 10)
        {
        // x > 10 인 경우 아래 블록의 명령문들이 실행된다.
        std::cout << "You entered " << x << "\n";
        std::cout << x << "is greater than 10\n";
        }
    else
        {
        // x <= 10 인 경우 아래 블록의 명령문들이 실행된다.
        std::cout << "You entered " << x << "\n";
        std::cout << x << "is not greater than 10\n";
        }

    return 0;
}

암시적 블록 (Implicit blocks)

if 문 또는 else 문의 명령문 부분에 블록을 선언하지 않으면 컴파일러가 암시적으로 선언한다.

if (expression)
    statement
else
    statement2

실제로는 다음과 같다.

if (expression)
{
    statement
}
else
{
    statement2
}

위 기능은 대부분 중요하지 않지만, 초보 프로그래머는 다음과 같은 작업을 시도하려 한다.

#include <iostream>

int main()
{
    if (1)
        int x = 5;
    else
        int x = 6;

    std::cout << x;

    return 0;
}

컴파일러는 식별자 x가 정의되지 않은 오류를 생성하므로 컴파일되지 않는다. 위의 예제는 다음과 같다.

#include <iostream>

int main()
{
    if (1)
    {
        int x = 5;
    } // 변수 x는 여기서 소멸한다.
    else
    {
        int x = 6;
    } // 변수 x는 여기서 소멸한다

    std::cout << x; // x는 여기서 정의되지 않았다.

    return 0;
}

위 예제에서 변수 x는 블록 범위를 가지고, 블록의 끝에서 소멸한다. std::cout 행에 도달할 때까지 x는 존재하지 않는다.


if 문 연결하기

if-else 문을 함께 연결할 수 있다.

#include <iostream>

int main()
{
    std::cout << "Enter a number: ";
    int x;
    std::cin >> x;

    if (x > 10)
        std::cout << x << "is greater than 10\n";
    else if (x < 10) 
        std::cout << x << "is less than 10\n";
    else
        std::cout << x << "is exactly 10\n";

    return 0;
}

위 코드는 아래 예제와 같게 실행된다.

#include <iostream>

int main()
{
    std::cout << "Enter a number: ";
    int x;
    std::cin >> x;

    if (x > 10)
        std::cout << x << "is greater than 10\n";
    else
    {
        if (x < 10) 
            std::cout << x << "is less than 10\n";
        else
            std::cout << x << "is exactly 10\n";
    }

    return 0;
}

첫째, x > 10을 평가한다. true이면 "is greater than 10\n"이 출력되고 완료된다. 그렇지 않으면 else 문이 실행된다. 해당 else 문은 중첩된 if 문 포함하고 있다. 중첩된 if 문 안에서 x < 10을 평가한다.


if 문 중첩 (Nesting if statements)

if 문을 다른 if 문 내에 중첩할 수 있다.

#include <iostream>

int main()
{
    std::cout << "Enter a number: ";
    int x;
    std::cin >> x;

    if (x >= 10) // outer if statement
        // 이런 식으로 if 문을 중첩하는 것은 나쁜 코딩 스타일이다.
        if (x <= 20) // inner if statement
            std::cout << x << "is between 10 and 20\n";

        // 이 else 문은 어디에 속해있을까?
        else
            std::cout << x << "is greater than 20\n";

    return 0;
}

위 프로그램에서 else 문은 어디에 속해있을까? 답은 else 문이 같은 블록의 마지막 일치하지 않는 if 문과 쌍을 이룬다는 것이다. 따라서 위의 프로그램에서 else는 내부 if 문과 일치한다.

복잡한 명령문을 중첩할 때 이러한 모호함을 피하려고 일반적으로 명령문을 블록으로 묶는 것이 좋다.

#include <iostream>

int main()
{
    std::cout << "Enter a number: ";
    int x;
    std::cin >> x;

    if (x >= 10)
    {
        if (x <= 20)
            std::cout << x << "is between 10 and 20\n";
        else // attached to inner if statement
            std::cout << x << "is greater than 20\n";
    }

    return 0;
}

if 문의 논리 연산자 사용하기 (Using logical operators with if statements)

또한, if 문에서 논리 연산자를 사용하여 여러 조건을 함께 확인할 수 있다.

#include <iostream>

int main()
{
    std::cout << "Enter an integer: ";
    int x;
    std::cin >> x;

    std::cout << "Enter another integer: ";
    int y;
    std::cin >> y;

    if (x > 0 && y > 0) // &&(논리 AND 연산자): 두 조건이 모두 참인지 확인한다.
        std::cout << "both numbers are positive\n";
    else if (x > 0 || y > 0) // ||(논리 OR 연산자): 어느 한 조건이상이 참인지 확인한다. 
        std::cout << "One of the numbers is positive\n";
    else
        std::cout << "Neither number is positive\n";

    return 0;
}

cpp 번역: 이 포스트의 원문은 http://www.learncpp.com/cpp-tutorial/52-if-statements/ 입니다.

댓글 로드 중…

블로그 정보

소년코딩 - 소년코딩

소년코딩, 자바스크립트, C++, 물리, 게임 코딩 이야기

최근에 게시된 이야기