05. 반복문: 지치지 않는 톱니바퀴
컴퓨터의 진정한 힘! 수만 번의 반복 작업을 단 몇 줄의 코드로 처리합니다.
1. for 반복문 (횟수가 명확할 때)
for문은 "몇 번 반복할지" 횟수가 정해져 있을 때 가장 쓰기 좋은 반복문입니다. 한 괄호 안에 시작, 끝, 증감을 모두 적어 가독성이 뛰어납니다.
1. 초기식
int i=0
int i=0
➡
2. 조건식
i < 3
i < 3
➡
3. 실행할 코드
printf(...)
printf(...)
➡
4. 증감식
i++
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의 결합
반복문을 내 마음대로 통제하려면 브레이크(멈춤)와 액셀(건너뛰기)이 필요합니다.
- break: 반복문을 그 즉시 박살 내고 탈출합니다.
- continue: 이번 턴만 건너뛰고, 다음 반복으로 넘어갑니다.
아래 코드는 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. 😈 함정 주의! 중괄호 {}가 없는 반복문
초보자들이 밤을 새우며 버그를 찾게 만드는 가장 악명 높은 함정입니다. for나 while 뒤에 중괄호 `{}`를 생략하면, 바로 밑에 있는 '단 한 줄'의 코드만 반복문으로 인정합니다.
💀 헷갈리는 예제: 텍스트는 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번만 찍힘!
------------------------------
빙글빙글 돕니다! (i=1)
빙글빙글 돕니다! (i=2)
빙글빙글 돕니다! (i=3)
이 줄도 3번 돌까요? <-- 딱 1번만 찍힘!
------------------------------
결론: 초보자 시절에는 코드가 한 줄이든 두 줄이든 무조건 중괄호 `{}`를 치는 습관을 들이는 것이 좋습니다!