지난 편에서는 if와 switch로 조건에 따라 프로그램의 흐름을 바꾸는 방법을 배웠습니다. 이번에는 같은 코드를 여러 번 반복해서 실행하는 방법, 바로 반복문에 대해 알아보겠습니다. C언어에는 for, while, do-while 이렇게 세 가지 반복문이 있는데, 셋 다 결국 “조건이 참인 동안 특정 코드를 계속 실행한다”는 목적은 같지만 쓰임새가 조금씩 다릅니다. 반복문을 익히고 나면 1부터 100까지 더하는 것처럼 손으로 일일이 쓰기 번거로운 작업을 몇 줄의 코드로 처리할 수 있게 됩니다.

for문, 정해진 횟수만큼 반복하기

for문은 반복 횟수가 명확할 때 가장 많이 쓰는 반복문입니다. 괄호 안에 “초기식; 조건식; 증감식” 세 부분을 세미콜론으로 구분해서 적습니다.

for (int i = 1; i <= 5; i++) {
    printf("%d번째 반복\n", i);
}

동작 순서는 이렇습니다. 먼저 int i = 1로 변수를 한 번만 초기화하고, i <= 5 조건을 검사해서 참이면 중괄호 블록을 실행합니다. 블록 실행이 끝나면 i++로 변수를 증가시키고, 다시 조건을 검사하는 과정을 조건이 거짓이 될 때까지 반복합니다. 즉 위 코드는 “1번째 반복”부터 “5번째 반복”까지 총 다섯 줄을 출력합니다.

while문, 조건이 참인 동안 계속 반복하기

while문은 반복 횟수를 미리 정하기 어렵고, 특정 조건이 만족되는 동안 계속 반복하고 싶을 때 사용합니다.

int count = 0;

while (count < 3) {
    printf("count = %d\n", count);
    count++;
}

while문은 for문과 다르게 초기화나 증감식을 괄호 안에 강제로 넣지 않기 때문에, 조건에 사용되는 변수를 반복문 안에서 직접 관리해줘야 합니다. 만약 count++를 빼먹으면 count는 영원히 0에 머물러 있고, 조건이 절대 거짓이 되지 않아 프로그램이 멈추지 않는 “무한 루프”에 빠지게 되니 주의해야 합니다.

do-while문, 일단 한 번은 실행하고 조건을 검사하기

do-while문은 while문과 거의 비슷하지만, 조건을 나중에 검사한다는 차이가 있습니다. 그래서 조건이 처음부터 거짓이더라도 블록 내부의 코드가 최소 한 번은 반드시 실행됩니다.

int num;

do {
    printf("숫자를 입력하세요 (0 입력 시 종료): ");
    scanf("%d", &num);
    printf("입력한 숫자: %d\n", num);
} while (num != 0);

이 코드는 사용자가 0을 입력할 때까지 계속 숫자를 물어보는데, 사용자가 무엇을 입력하기 전에는 조건을 검사할 값 자체가 없으므로 일단 한 번 실행부터 하고 그 다음에 조건을 확인하는 do-while이 딱 어울리는 상황입니다.

예제 코드로 확인해보기

세 가지 반복문의 차이를 한 프로그램에서 비교할 수 있도록 1부터 n까지의 합을 구하는 예제를 만들어 보겠습니다.

#include <stdio.h>

int main(void) {
    int n = 5;
    int sum_for = 0;
    int sum_while = 0;
    int sum_do_while = 0;

    /* for문으로 합 구하기 */
    for (int i = 1; i <= n; i++) {
        sum_for += i;
    }

    /* while문으로 합 구하기 */
    int i = 1;
    while (i <= n) {
        sum_while += i;
        i++;
    }

    /* do-while문으로 합 구하기 */
    int j = 1;
    do {
        sum_do_while += j;
        j++;
    } while (j <= n);

    printf("for문 결과: %d\n", sum_for);
    printf("while문 결과: %d\n", sum_while);
    printf("do-while문 결과: %d\n", sum_do_while);

    return 0;
}

코드 동작 설명 및 실행 결과

  • 세 가지 반복문 모두 1부터 5까지의 정수를 하나씩 더해나가는 동일한 작업을 수행합니다. sum 변수에 i 또는 j를 계속 누적해서 더하는 방식은 똑같지만, 반복 조건을 관리하는 위치와 방식이 다를 뿐입니다.
  • for문은 변수 선언과 증감을 괄호 안에서 한눈에 파악할 수 있어 코드가 간결하고, while문은 변수 선언과 증감이 분리되어 있어 유연하지만 실수로 증감식을 빼먹기 쉽습니다. do-while문은 조건 검사가 맨 마지막에 있다는 점만 다를 뿐 결과는 동일합니다.
  • 이 코드를 gcc loops.c -o loops로 컴파일하고 실행하면 다음과 같은 결과가 출력됩니다.
for문 결과: 15
while문 결과: 15
do-while문 결과: 15

1부터 5까지 더한 값인 15가 세 가지 방식 모두에서 동일하게 나오는 것을 확인할 수 있습니다.

핵심 요약

  • for문은 반복 횟수가 명확할 때, “초기식; 조건식; 증감식”을 한곳에 모아 간결하게 작성할 수 있습니다.
  • while문은 조건만 검사하고 반복하며, 조건에 쓰이는 변수를 반복문 내부에서 직접 증감시켜야 무한 루프를 피할 수 있습니다.
  • do-while문은 조건 검사보다 실행이 먼저이므로, 최소 한 번은 실행되어야 하는 로직(예: 사용자 입력 검증)에 적합합니다.
  • 세 반복문 모두 같은 결과를 만들 수 있지만, 상황에 맞는 반복문을 선택하면 코드가 더 읽기 쉽고 실수도 줄어듭니다.

다음 편에서는 여러 개의 값을 하나의 변수 이름으로 묶어서 관리하는 방법, “배열”에 대해 알아보겠습니다. 반복문과 배열을 함께 사용하면 수십, 수백 개의 데이터도 몇 줄의 코드로 손쉽게 처리할 수 있습니다.