for 문으로 정해진 횟수만큼 반복하는 법을 배웠으니, 이번에는 조금 다른 종류의 반복, 즉 특정 조건이 만족되는 동안 계속해서 반복하는 방법에 대해 알아보겠습니다. 언제 끝날지 모르는 반복 작업에 아주 유용한 도구들입니다. 개인적으로 필자도 처음 배울때 반복문이 어려웠던 기억이 납니다. 반복문을 사용하는 것도 중요하지만 반복되는 구간이 눈에 보이는 것이 중요한거 같습니다. 공부하다 어려운 부분은 언제든 댓글로 질문해 주세요
제10장: 또 다른 반복문, while과 do-while
지난 9장에서 배운 for 문은 시작과 끝, 그리고 반복 횟수가 명확하게 정해져 있을 때 매우 편리했습니다. "100번 반복해!", "1부터 9까지 곱해!" 와 같은 명령에 안성맞춤이었죠.
하지만 세상에는 반복 횟수를 미리 알 수 없는 일들이 더 많습니다. 예를 들어, "사용자가 'q'라는 키를 누를 때까지 계속 입력을 받는다"거나 "온라인 게임에서 플레이어의 체력이 0이 될 때까지 몬스터가 공격한다" 와 같은 경우는 몇 번 만에 끝날지 예측할 수 없습니다.
이런 '특정 조건을 만족하는 동안' 계속 반복해야 하는 상황을 위해 C언어는 while 문과 do-while 문을 제공합니다.
1. "~하는 동안 계속", while 문
while은 '~하는 동안'이라는 뜻으로, C언어에서 가장 기본적이고 단순한 구조의 반복문입니다. while 문은 괄호 () 안의 조건식이 '참(True)'인 동안, 중괄호 {} 안의 코드를 계속해서 반복 실행합니다.
기본 구조:
while (조건식)
{
// 조건식이 참인 동안 반복해서 실행될 코드
}
for 문과 비교해 보면, 초기식과 증감식이 괄호 안에서 빠져있는 것을 볼 수 있습니다. 따라서 while 문을 사용할 때는 반복을 제어할 변수를 반복문 시작 전에 초기화하고, 반복문 안에서 직접 값을 변화(증감)시켜 언젠가 조건식이 거짓이 되어 루프가 끝날 수 있도록 만들어야 합니다.
for문 vs while문 비교 (1부터 5까지 출력)
// for 문 버전
for (int i = 1; i <= 5; i++)
{
printf("%d ", i);
}
// while 문 버전
int i = 1; // 1. 초기식 (반복문 시작 전)
while (i <= 5) // 2. 조건식
{
printf("%d ", i);
i++; // 3. 증감식 (반복문 블록 내부)
}
두 코드는 정확히 똑같은 결과를 출력합니다. 이처럼 for 문으로 할 수 있는 일은 while 문으로도 모두 가능하며, 그 반대도 마찬가지입니다.
예제: 간단한 숫자 맞추기 게임
컴퓨터가 생각하는 숫자(예: 7)를 사용자가 맞출 때까지 계속 입력을 받는 프로그램을 만들어 봅시다. 몇 번 만에 맞출지 모르니 while 문이 제격입니다.
#include <stdio.h>
int main(void) {
int answer = 7;
int guess;
printf("숫자 맞추기 게임에 오신 것을 환영합니다!\n");
while (guess != answer) { // 입력한 값(guess)이 정답(answer)과 다른 동안 반복
printf("1부터 10 사이의 숫자를 추측해보세요: ");
scanf("%d", &guess);
}
printf("축하합니다! 정답을 맞추셨습니다.\n");
return 0;
}
2. "일단 실행하고 보자", do-while 문
do-while 문은 while 문과 거의 똑같지만, 딱 한 가지 중요한 차이점이 있습니다. 바로 조건을 나중에 검사한다는 점입니다.
while문: 조건을 먼저 검사하고, 참이면 실행 (Pre-test loop)do-while문: 코드를 먼저 한 번 실행하고, 그 다음 조건을 검사해서 참이면 반복 (Post-test loop)
따라서 do-while 문의 {} 안 코드는 조건식의 참/거짓 여부와 상관없이 최소 한 번은 반드시 실행됨을 보장받습니다.
기본 구조:
do {
// 먼저 한 번 실행하고,
// 그 다음 조건식을 검사해서 참이면 반복할 코드
} while (조건식); // 주의: 마지막에 반드시 세미콜론(;)이 붙습니다!
예제: 다시 하시겠습니까?
사용자에게 무언가 작업을 수행한 뒤, 계속할지 물어보는 프로그램에 do-while은 매우 유용합니다. 질문을 최소 한 번은 해야 하기 때문이죠.
#include <stdio.h>
int main(void) {
char response;
do {
printf("작업을 수행했습니다!\n");
printf("계속하시겠습니까? (y/n): ");
scanf(" %c", &response); // %c 앞 공백으로 버퍼 비우기
} while (response == 'y' || response == 'Y');
printf("프로그램을 종료합니다.\n");
return 0;
}
3. for, while, do-while 언제 무엇을 쓸까?
세 가지 반복문을 상황에 맞게 사용하는 것은 좋은 코드를 작성하는 기본입니다.
for문:- 반복 횟수가 명확하거나, 일정 범위 내에서 규칙적으로 변하는 변수를 가지고 반복할 때.
- 예: 1부터 100까지 합 구하기, 구구단 출력, 배열 순회 등.
while문:- 반복 횟수를 알 수 없고, 특정 조건이 만족될 때까지 반복해야 할 때.
- 조건이 처음부터 거짓이라 한 번도 실행되지 않을 수 있는 경우.
- 예: 파일의 끝까지 데이터 읽기, 사용자가 특정 값을 입력할 때까지 대기 등.
do-while문:while문과 비슷하지만, 반복할 코드를 최소 한 번은 반드시 실행해야 할 때.- 예: 사용자에게 메뉴를 보여주고 입력을 받은 뒤, 입력값이 유효한지 검사하는 경우.
4. [도전! 프로그래밍] 간단한 ATM 메뉴
do-while 문과 8장에서 배운 switch 문을 조합하여 간단한 ATM 기기 프로그램을 만들어 봅시다. 프로그램은 사용자가 종료(0번)를 선택할 때까지 계속해서 메뉴를 보여주어야 합니다.
기능 요구사항:
- 최초 잔액(balance)을 10000원으로 설정합니다.
do-while문을 사용해 다음 메뉴를 반복해서 보여줍니다.- 1: 입금 (Deposit)
- 2: 출금 (Withdraw)
- 3: 잔액 조회 (Check Balance)
- 0: 종료 (Exit)
switch문을 사용해 사용자의 선택에 따라 각 기능을 수행합니다.- 입금, 출금 시 잔액이 변해야 합니다.
- 사용자가 0을 입력하면 "프로그램을 종료합니다." 메시지를 출력하고 반복을 마칩니다.
이번 장 정리
while문: 조건식을 먼저 검사하여, 참인 동안 코드를 반복합니다. 반복 횟수를 모를 때 유용합니다.do-while문: 코드를 먼저 한 번 실행한 뒤, 조건식을 검사하여 참인 동안 코드를 반복합니다. 코드가 최소 한 번은 실행되어야 할 때 사용합니다.- 세 가지 반복문은 서로 변환 가능하지만, 상황에 맞는 반복문을 사용하는 것이 코드의 가독성과 논리를 명확하게 만듭니다.
이제 우리는 for, while, do-while 이라는 세 가지 강력한 반복 도구를 모두 갖추었습니다. 하지만 반복문을 사용하다 보면 중간에 반복을 탈출하거나, 현재 차례를 건너뛰고 싶을 때가 있습니다. 다음 장에서는 break와 continue를 사용하여 반복의 흐름을 더욱 세밀하게 제어하는 법을 배우겠습니다.
'C, C++ 언어' 카테고리의 다른 글
| C언어 기초 12. 함수 (0) | 2025.10.17 |
|---|---|
| C언어 기초 11. break 와 continue (0) | 2025.10.16 |
| C언어 기초 9. 반복문, for 문 (0) | 2025.10.14 |
| C언어 기초 8장 : 여러 선택지 중 하나, switch 문 (0) | 2025.10.13 |
| C언어 기초 7. 조건문, if 문 (0) | 2025.09.24 |