반복문의 기본기를 다졌으니, 이제 반복의 흐름을 더욱 섬세하게 조종하는 방법을 배울 차례입니다. 때로는 반복을 중간에 그만두거나, 이번 차례만 건너뛰고 싶을 때가 있거든요. 그럴 때 사용하는 마법 같은 키워드들을 만나보겠습니다.
제11장: break와 continue로 반복문 탈출하기
지금까지 우리는 for, while, do-while이라는 세 가지 반복문을 배웠습니다. 이 반복문들은 모두 정해진 '조건식'이 거짓이 될 때까지 묵묵히 자신의 일을 수행했습니다. 하지만 프로그램을 만들다 보면 좀 더 유연한 제어가 필요할 때가 많습니다.
예를 들어, 100명의 손님 명단에서 '김철수'라는 사람을 찾았는데, 굳이 100명 끝까지 다 확인할 필요가 있을까요? 또는 1부터 100까지 숫자를 더하는데, 3의 배수는 제외하고 싶다면 어떻게 해야 할까요?
이럴 때 사용하는 것이 바로 break와 continue 입니다. break는 '비상 탈출 버튼', continue는 '이번만 쉴게요(건너뛰기) 버튼'이라고 생각하면 쉽습니다.
1. 반복을 즉시 중단! break
break 키워드는 우리에게 이미 익숙합니다. 8장의 switch 문에서 각 case를 실행한 뒤 빠져나오는 용도로 사용했었죠. break는 루프(반복문) 안에서도 똑같은 역할을 합니다. break를 만나는 즉시, 반복문은 자신의 조건식이나 남은 횟수에 상관없이 그 자리에서 즉시 종료됩니다. 그리고 프로그램의 흐름은 반복문 바로 다음 코드로 넘어갑니다.
예제: 1부터 더하다가 합이 100을 넘으면 종료
1부터 계속 더해나가다가, 그 합(sum)이 처음으로 100을 넘는 순간 몇까지 더했는지 알고 싶다고 해봅시다. for문은 1000까지 돌도록 넉넉하게 설정했지만, break 덕분에 그 전에 멈출 수 있습니다.
#include <stdio.h>
int main(void)
{
int sum = 0;
int i;
for (i = 1; i <= 1000; i++)
{
sum += i;
if (sum > 100)
{
printf("합이 100을 넘었습니다.\\n");
printf("마지막으로 더한 숫자는 %d입니다.\\n", i);
printf("현재 합계는 %d입니다.\\n", sum);
break; // 합이 100을 넘었으므로 반복문을 즉시 탈출!
}
}
printf("for 문이 종료되었습니다.\\n");
return 0;
}
실행 결과:
합이 100을 넘었습니다.
마지막으로 더한 숫자는 14입니다.
현재 합계는 105입니다.
for 문이 종료되었습니다.
i가 14가 되어 sum이 105가 되는 순간, if문 안의 break가 실행되어 for문이 즉시 종료되었습니다.
사실 위의 예제는 끝을 알수 없는 형태이므로 while 문을 사용하는게 더 좋습니다.
함 while 문으로 변경해 보세요 .
2. 이번 차례는 건너뛰기! continue
continue는 break보다 조금 더 부드러운 제어 키워드입니다. 반복문 전체를 탈출하는 break와 달리, continue는 현재 진행 중인 반복 차례만 중단하고, 즉시 다음 반복 차례로 넘어갑니다.
for 문 안에서 continue를 만나면, 반복 블록의 나머지 부분을 건너뛰고 증감식(i++)으로 바로 이동합니다.
예제: 1부터 20까지 숫자 중 짝수만 출력하기
for 문으로 1부터 20까지 반복하되, 만약 현재 숫자가 홀수이면 continue를 사용해 printf를 실행하지 않고 건너뛰게 만들어 봅시다.
#include <stdio.h>
int main(void)
{
printf("1부터 20 사이의 짝수:\\n");
for (int i = 1; i <= 20; i++)
{
if (i % 2 != 0) // i가 홀수라면
{
continue; // 아래 printf를 실행하지 말고, 다음 반복으로(i++로) 바로 가라!
}
printf("%d ", i);
}
printf("\\n");
return 0;
}
실행 결과:
1부터 20 사이의 짝수:
2 4 6 8 10 12 14 16 18 20
i가 1, 3, 5... 와 같은 홀수일 때는 continue 문이 실행되어, 아래에 있는 printf 문에 닿지 못하고 바로 i++로 점프해버렸습니다.
3. break vs continue 한눈에 보기
구분 break continue
| 의미 | "그만! 여기서 완전히 나갈래!" | "이번 판은 무효! 다음 판으로 넘어가자!" |
| 역할 | 현재 속한 반복문 전체를 즉시 종료 | 현재 반복 차례만 즉시 종료 |
| 실행 흐름 | 반복문 바깥(})의 다음 코드로 이동 | 다음 반복을 위해 조건식 또는 증감식으로 이동 |
| 비유 | 운행 중인 기차에서 비상 하차 | 이번 역은 그냥 통과하고 다음 역으로 직행 |
4. [도전! 프로그래밍] 무한 루프를 이용한 숫자 맞추기 게임 업그레이드
10장에서 만들었던 숫자 맞추기 게임을 while(1) 무한 루프와 break를 사용하여 업그레이드해 봅시다. 이 방식은 게임이나 메뉴 프로그램에서 매우 흔하게 사용되는 실용적인 구조입니다.
요구사항:
- while(1)을 사용하여 무한히 반복되는 루프를 만듭니다.
- 루프 안에서 사용자에게 숫자를 입력받습니다.
- if문을 사용하여 사용자의 추측이 정답보다 큰지, 작은지, 또는 같은지 비교합니다.
- 추측이 정답보다 크면 "더 작은 수입니다!" 라고 힌트를 줍니다.
- 추측이 정답보다 작으면 "더 큰 수입니다!" 라고 힌트를 줍니다.
- 추측이 정답과 일치하면 "정답입니다!" 메시지를 출력하고, break를 사용해 무한 루프를 탈출합니다.
이번 장 정리
- break: 현재 실행 중인 반복문(또는 switch문)을 즉시, 완전히 탈출합니다.
- continue: 현재 실행 중인 반복 차례만 중단하고, 다음 반복 차례로 넘어갑니다.
- 이 두 키워드를 사용하면 반복의 흐름을 더욱 정교하고 효율적으로 제어할 수 있습니다.
이것으로 C언어의 흐름 제어(선택과 반복)에 대한 학습이 모두 끝났습니다. 여러분은 이제 변수를 만들고, 연산을 하고, 상황에 따라 다른 코드를 실행하거나 특정 코드를 반복 실행하는 등 프로그램의 웬만한 논리 구조를 모두 만들 수 있게 되었습니다.
지금까지 우리는 모든 코드를 main이라는 하나의 큰 함수 안에 작성해왔습니다. 하지만 프로그램이 점점 커지고 복잡해지면, 이는 좋은 방법이 아닙니다. 다음 파트 4부터는 코드를 기능별로 정리하고 재사용할 수 있게 해주는 멋진 도구, '함수(Function)' 에 대해 배우며 진정한 프로그래밍의 세계로 한 걸음 더 나아가겠습니다.
'C, C++ 언어' 카테고리의 다른 글
| C 언어 기초 13. 배열 (0) | 2025.10.19 |
|---|---|
| C언어 기초 12. 함수 (0) | 2025.10.17 |
| C언어 기초 10. 반복문 while 문과 do-while 문 (0) | 2025.10.15 |
| C언어 기초 9. 반복문, for 문 (0) | 2025.10.14 |
| C언어 기초 8장 : 여러 선택지 중 하나, switch 문 (0) | 2025.10.13 |