[6-4] 루프에서 벗어나기

2024. 9. 11. 13:49·📚 STUDY/🔥 C

프로그래밍을 하다보면 루프를 중간에 종료시켜야하는 때, 혹은 아예 종료되는 지점이 여러개인 반복문을 작성해야 할 때가 발생함.

➡ 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  (2) 2024.09.05
'📚 STUDY/🔥 C' 카테고리의 다른 글
  • Q&A (continue, goto, null)
  • [6-5] null문
  • [6-3] for문
  • [6-2] do문
엄지잉
엄지잉
공부하는거 올림
  • 엄지잉
    엄지잉의 이것저것
    엄지잉
  • 전체
    오늘
    어제
    • 분류 전체보기 (94)
      • 🏫 학교 (2)
        • 👩‍🏫 교직 (1)
        • 🏢 USG (1)
      • 🌱 탐구 (17)
        • 📷 SLAM (7)
        • 💡 연구 (8)
        • 🌐 BOJ (2)
      • 📚 STUDY (47)
        • 🔥 C (32)
        • 📈 알고리즘 (9)
        • 👀 컴퓨터비전 (5)
        • 🔆 UNITY (1)
      • 🏆 자격증 (23)
        • ⚡ 정처기 (17)
        • 🔠 TOEIC (6)
      • 🎈 활동 (4)
        • 🎁 CJ 리모트 인턴십 (2)
        • 😶 기타 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Github
  • 공지사항

  • 인기 글

  • 태그

    Body Tracking
    정보시스템 구축관리
    Azure Kinect
    토익
    Unity
    C
    정보처리기사
    필기
    컴퓨터비전
    azurekinect
    실기
    c기초
    C언어
    DB 구축
    2022년
    모션캡처
    opencv
    정처기
    C++
    BOJ
    Remote Internship
    알고리즘
    SW 설계
    2021년
    식별자
    Slam
    RC
    프언 활용
    SW 개발
    mocopi
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
엄지잉
[6-4] 루프에서 벗어나기
상단으로

티스토리툴바