05. 반복문: 지치지 않는 톱니바퀴

컴퓨터의 진정한 힘! 수만 번의 반복 작업을 단 몇 줄의 코드로 처리합니다.

1. for 반복문 (횟수가 명확할 때)

for문은 "몇 번 반복할지" 횟수가 정해져 있을 때 가장 쓰기 좋은 반복문입니다. 한 괄호 안에 시작, 끝, 증감을 모두 적어 가독성이 뛰어납니다.

1. 초기식
int i=0
2. 조건식
i < 3
3. 실행할 코드
printf(...)
4. 증감식
i++

▲ 한 바퀴를 돌면 4번(증감)에서 2번(조건)으로 다시 돌아가 검사합니다.

💻 단일 for문 예제: 로켓 발사 카운트다운

#include <stdio.h>
#include <windows.h> // Sleep() 함수를 쓰기 위해 추가

int main() {
    printf("🚀 로켓 발사를 준비합니다!\n");
    
    // i는 5부터 시작해서, 0보다 클 때까지, 1씩 줄어듭니다.
    for (int i = 5; i > 0; i--) {
        printf("%d...\n", i);
        Sleep(1000); // 1000밀리초(1초) 동안 프로그램을 잠재움
    }
    
    printf("발사!!! 🔥\n");
    return 0;
}

💻 중첩 for문 예제: 디지털 시계 만들기

for문 안에 또 for문이 들어가면 어떻게 될까요? 시침이 1시간 움직일 때, 분침이 60번 움직이는 시계의 원리와 완벽히 똑같습니다.

#include <stdio.h>

int main() {
    // 바깥쪽 for문 (시간)
    for (int h = 1; h <= 3; h++) {
        // 안쪽 for문 (분)
        for (int m = 0; m <= 59; m += 15) { // 15분 단위로 증가
            printf("[%02d:%02d] 똑딱\n", h, m);
        }
        printf("--- 1시간 경과! ---\n");
    }
    return 0;
}

2. while 반복문 (조건이 중요할 때)

while문은 횟수보다는 "이 조건이 참인 동안에는 계속 돌려라!"라고 명령할 때 씁니다. RPG 게임에서 체력이 0이 될 때까지 계속 싸우는 상황 등에 적합합니다.

💻 단일 while문 예제: 광물 캐기 게임

int stamina = 30;

while (stamina > 0) {
    printf("⛏️ 광물을 캡니다! (남은 체력: %d)\n", stamina);
    stamina -= 10; // 곡괭이질 한 번에 체력 10 소모
}
printf("💀 체력이 방전되어 쓰러졌습니다.\n");

💻 중첩 while문 예제: 2차원 맵 좌표 탐색

int y = 1;
while (y <= 3) {      // y축 (세로) 3칸
    int x = 1;
    while (x <= 3) {  // x축 (가로) 3칸
        printf("(X:%d, Y:%d) 탐색중...  ", x, y);
        x++;
    }
    printf("\n"); // 한 줄 끝나면 줄바꿈
    y++;
}

3. 🚀 난이도 UP! break, continue, if의 결합

반복문을 내 마음대로 통제하려면 브레이크(멈춤)와 액셀(건너뛰기)이 필요합니다.

아래 코드는 1부터 10까지 출력하되, 4는 재수 없으니 건너뛰고, 8을 만나면 아예 멈춰버리는 코드입니다.

#include <stdio.h>

int main() {
    for (int i = 1; i <= 10; i++) {
        
        if (i == 4) {
            printf("  >> %d는 스킵합니다! (continue)\n", i);
            continue; // 아래 코드를 무시하고 다음 i(5)로 올라감
        }
        
        if (i == 8) {
            printf("  >> %d를 발견! 반복문 탈출! (break)\n", i);
            break; // for문 자체를 완전히 파괴하고 나감
        }
        
        printf("현재 숫자: %d\n", i);
    }
    printf("반복문 종료.\n");
    
    return 0;
}

4. 😈 함정 주의! 중괄호 {}가 없는 반복문

초보자들이 밤을 새우며 버그를 찾게 만드는 가장 악명 높은 함정입니다. forwhile 뒤에 중괄호 `{}`를 생략하면, 바로 밑에 있는 '단 한 줄'의 코드만 반복문으로 인정합니다.

💀 헷갈리는 예제: 텍스트는 3번 찍힐까요?

들여쓰기가 되어있다고 해서 컴퓨터가 속지 않습니다. 컴퓨터는 오직 문법만 봅니다.

#include <stdio.h>

int main() {
    printf("--- 중괄호 없는 for문 테스트 ---\n");
    
    for (int i = 1; i <= 3; i++)
        printf("빙글빙글 돕니다! (i=%d)\n", i);
        printf("이 줄도 3번 돌까요?\n"); // 함정 카드!!

    printf("------------------------------\n");
    return 0;
}

결과 예측해보기

사람의 눈에는 두 줄 모두 들여쓰기가 되어 있어 3번씩 찍힐 것 같지만, 실제 실행 결과는 아래와 같습니다.

--- 중괄호 없는 for문 테스트 ---
빙글빙글 돕니다! (i=1)
빙글빙글 돕니다! (i=2)
빙글빙글 돕니다! (i=3)
이 줄도 3번 돌까요? <-- 딱 1번만 찍힘!
------------------------------

결론: 초보자 시절에는 코드가 한 줄이든 두 줄이든 무조건 중괄호 `{}`를 치는 습관을 들이는 것이 좋습니다!