프로그래밍을 하다보면 루프를 중간에 종료시켜야하는 때, 혹은 아예 종료되는 지점이 여러개인 반복문을 작성해야 할 때가 발생함.
➡ break문을 통해 이 2가지 상황을 모두 만족시킬 수 있음.
📌 break문
- break문은 같은 방식으로 while문, for문, do문과 같은 반복문에도 사용됨.
🌐 자연수 n이 소수인지 판별하는 프로그램
for (d = 2; d < n; ++d) {
if (n % d == 0) {
break;
}
}
if (d < n) {
printf("%d은/는 %d로 나뉘어진다\n", n, d);
} else {
printf("%d은/는 소수이다.\n", n);
}
- break문은 종료점이 루프의 시작이나 끝이 아닌 도중에 있을 때, 상당히 유용함.
for (;;) {
printf("Enter a number (enter 0 to stop): ");
scanf("%d", &n);
if (n == 0) {
break;
}
printf("%d cubed is %d\n", n, n * n * n);
}
- break문은 가장 안쪽의 while문, for문, do문, switch문에서 제어를 밖으로 옮김.
- ➡ 위와 같은 구문들이 여러 겹으로 작성되어있다면, break문은 오로지 한 구문만 벗어나게 해줌.
💡 while문 내에 있는 switch문의 경우
while (…) {
switch (…) {
…
break;
…
}
}
- break문은 switch문에서 제어를 밖으로 빼내지만, while문에서 빼내지는 않음. (이후 구체적으로 다룸)
📌 continue문
- continue는 마치 break와 비슷함.
- break는 프로그램의 제어를 루프 이후로 전달한다면, continue는 제어를 루프 끝나기 바로 이전에 전달함.
- break가 루프에서 벗어나게 해준다면, continue는 루프 안에 그대로 남아있게 해줌.
- 또 다른 차이점 : break는 switch문과 루프문(while, do, for)에 사용될 수 있지만, continue는 루프에만 사용될 수 있음.
🌐 숫자 여러 개를 연속적으로 받아 그들의 합을 계산하는 예제
n = 0;
sum = 0;
while (n < 10) {
scanf("%d", &i);
if (i == 0) {
continue;
}
sum += i;
++n;
/* continue jumps to here */
}
- 루프는 10개의 0이 아닌 수가 입력되면 종료시킴.
- 0이 입력되면, continue가 실행되어 남은 루프 본문을 생략하지만, 루프가 종료되지는 않음.
📌 goto문
- break, continue와 다르게 해당 구문에 표식이 있는 한 함수 내의 그 어느 구문으로든 도약할 수 있음.
- goto문 자체는 이와 같은 구조를 가짐 : goto identifier ;
- 구문 goto L;을 실행한다면 프로그램의 제어를 표식 L이 있는 구문으로 옮김. 여기서 표식 L은 반드시 goto문이 있는 함수 내에 있어야 함.
- 루프를 도중에 강제로 종료할 때, break문이 아니라 goto문을 이용할 수도 있음.
for (d = 2; d < n; ++d) {
if (n % d == 0) {
goto done;
}
}
done:
if (d < n) {
printf("%d is divisible by %d\n", n, d);
} else {
printf("%d is a prime\n", n);
}
- goto문은 옛날 프로그래밍 언어들의 잔재이기 때문에, C 프로그램에서 자주 사용되지 않음.
- goto문이 가끔 유용하게 사용될 때가 있긴 함.
① 루프 내에 switch문이 있는 상황에, switch문 내부에선 전체 반복문에서 벗어날 수 없음. break문을 사용하면 반복문에서 벗어나지 않고 switch문에서 벗어남. 이는 goto문을 통해 손쉽게 해결할 수 있음.
② 반복문이 여러겹일 때 유용하게 사용됨.
🌐 [프로그래밍] 은행계좌 프로그램
🌐 check.c
/* Balances a checkbook */
#include <stdio.h>
int main(void)
{
int cmd;
float balance = 0.0f;
float credit;
float debit;
printf("*** ACME checkbook-balancing program ***\n");
printf("Commands: 0=clear, 1=credit, 2=debit, 3=balance, 4=exit\n\n");
for (;;) {
printf("Enter command: ");
scanf("%d", &cmd);
switch (cmd) {
case 0:
balance = 0.0f;
break;
case 1:
printf("Enter amount of credit: ");
scanf("%f", &credit);
balance += credit;
break;
case 2:
printf("Enter amount of debit: ");
scanf("%f", &debit);
balance -= debit;
break;
case 3:
printf("Current balance: $%.2f\n", balance);
break;
case 4:
return 0;
default:
printf("Commands: 0=clear, 1=credit, 2=debit, 3=balance, 4=exit\n\n");
break;
}
}
}
💡 본 내용은 K.N.King의 C Programming: A Modern Approach 책을 참고하였습니다.
'📚 STUDY > 🔥 C' 카테고리의 다른 글
Q&A (continue, goto, null) (2) | 2024.09.11 |
---|---|
[6-5] null문 (1) | 2024.09.11 |
[6-3] for문 (1) | 2024.09.05 |
[6-2] do문 (0) | 2024.09.05 |
[6-1] while (0) | 2024.09.05 |