반복문 (for/while/do-while)
지난 편에서는 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문은 조건 검사보다 실행이 먼저이므로, 최소 한 번은 실행되어야 하는 로직(예: 사용자 입력 검증)에 적합합니다.- 세 반복문 모두 같은 결과를 만들 수 있지만, 상황에 맞는 반복문을 선택하면 코드가 더 읽기 쉽고 실수도 줄어듭니다.
다음 편에서는 여러 개의 값을 하나의 변수 이름으로 묶어서 관리하는 방법, “배열”에 대해 알아보겠습니다. 반복문과 배열을 함께 사용하면 수십, 수백 개의 데이터도 몇 줄의 코드로 손쉽게 처리할 수 있습니다.