04. 조건문: 프로그램의 갈림길

"만약 ~라면?" 상황에 따라 다른 행동을 하도록 프로그램에 지능을 심어줍니다.

1. if 문: 진실 혹은 거짓

조건문 중에서 가장 기본이 되는 것이 if 문입니다. 괄호 안의 조건이 참(1)일 때만 중괄호 안의 코드를 실행합니다.

시작
조건이 참인가?
YES
코드 실행
NO
그냥 통과
int score = 95;

if (score >= 90) {
    printf("합격입니다! 우와!\n");
}

2. if-else 와 else if: 더 복잡한 선택

조건이 참일 때뿐만 아니라, **거짓일 때** 실행할 코드도 지정할 수 있습니다. 또한 여러 가지 조건을 줄줄이 검사할 수도 있죠.

💡 갈림길 비유

if: 정면에 길이 있으면 가라.
else if: (정면에 길이 없으면) 오른쪽 길은 있는가? 있다면 가라.
else: (모든 길이 없으면) 그냥 멈춰라.

int age = 15;

if (age >= 20) {
    printf("성인입니다.\n");
} else if (age >= 14) {
    printf("청소년입니다.\n");
} else {
    printf("어린이입니다.\n");
}

3. 🎮 창의적 응용 예제 1: 던전 입구 판독기

사용자의 레벨을 입력받아, 특정 레벨 이상만 들어갈 수 있는 던전 시스템을 만들어 봅시다. 앞서 배운 system() 함수와 조합하면 더 재미있습니다!

#include <stdio.h>
#include <stdlib.h>

int main() {
    int level;
    printf("용사여, 레벨을 입력하라: ");
    scanf("%d", &level);

    if (level >= 50) {
        printf("🔥 [전설의 용사 던전] 입장이 허용되었습니다!\n");
        system("color 0C"); // 화면을 붉은색(위험)으로 변경
    } else if (level >= 20) {
        printf("⚔️ [중급자 던전] 입장이 허용되었습니다.\n");
        system("color 0B"); // 화면을 청록색으로 변경
    } else {
        printf("💀 레벨이 너무 낮습니다. 수련하고 오세요!\n");
    }

    return 0;
}

4. switch 문: 명확한 메뉴 선택

검사할 조건이 특정 '값'으로 딱딱 떨어질 때(정수, 문자 등)는 if 보다 switch가 훨씬 깔끔합니다. 자판기 버튼을 누르는 것과 같습니다.

자판기 버튼과 switch문의 매칭 개념도
▲ switch 문: 입력된 번호(case)에 맞는 버튼을 즉시 누르는 것
int button = 2;

switch (button) {
    case 1:
        printf("콜라가 나옵니다.\n");
        break; // break가 없으면 아래로 줄줄이 실행되니 주의!
    case 2:
        printf("사이다가 나옵니다.\n");
        break;
    default: // 어떤 case에도 해당하지 않을 때
        printf("잘못된 버튼입니다.\n");
}

⚠️ break의 중요성!

break를 빠뜨리면 해당 case가 끝난 후에도 멈추지 않고 아래 case들까지 전부 실행해버립니다. 이를 'Fall-through'라고 부릅니다. 특별한 의도가 없다면 꼭 적어주세요!

5. 🍱 창의적 응용 예제 2: 오늘의 점심 메뉴 추천기

1~3 사이의 숫자를 입력하면 랜덤하게 메뉴를 골라주는 (것처럼 보이는) 프로그램을 만들어 봅시다.

#include <stdio.h>

int main() {
    int pick;
    printf("--- [오늘 뭐 먹지?] ---\n");
    printf("1~3 중 행운의 숫자를 고르세요: ");
    scanf("%d", &pick);

    switch (pick) {
        case 1:
            printf("🍱 오늘은 따뜻한 국밥 어떠세요?\n");
            break;
        case 2:
            printf("🍕 치즈가 듬뿍 들어간 피자 추천!\n");
            break;
        case 3:
            printf("🍣 신선한 초밥이 당신을 기다립니다.\n");
            break;
        default:
            printf("🤔 배가 안 고프신가 보군요?\n");
    }

    return 0;
}

6. 🧮 보너스: 미니 사칙연산 계산기

입력받은 기호(+, -, *, /)에 따라 다른 계산을 수행하는 프로그램을 switchchar 자료형으로 만들어 봅시다.

#include <stdio.h>

int main() {
    char op;
    int n1, n2;

    printf("계산식 입력 (예: 10 + 5): ");
    scanf("%d %c %d", &n1, &op, &n2);

    switch (op) {
        case '+': printf("결과: %d\n", n1 + n2); break;
        case '-': printf("결과: %d\n", n1 - n2); break;
        case '*': printf("결과: %d\n", n1 * n2); break;
        case '/': 
            if (n2 != 0) printf("결과: %d\n", n1 / n2); 
            else printf("0으로 나눌 수 없습니다!\n");
            break;
        default: printf("잘못된 연산자입니다.\n");
    }

    return 0;
}