C 제어 break continue - sonkoni/Koni-Wiki GitHub Wiki

breakcontinue 는 제어흐름을 벗어나기 위해 사용한다.

break    : for, while, do-while, switch : 제어흐름을 중단하고 루프를 벗어난다.
continue : for, while, do-while         : 하위흐름을 건너뛰고 루프 상단으로 돌아간다. ⚠️ do-while 에서는 주의!

break

/** 5 에서 루프 탈출 **/
// -> 1
// -> 2
// -> 3
// -> 4
// -> 5
// -- END --

#include <stdio.h>
int main(int argc, char *argv[]) {
    for (int num = 0; num < 10; num++) {
        printf("-> %d\n", num);
        if (num == 5) {
            break;
        }
    }
    printf("-- END --\n");
    return 0;
}

#include <stdio.h>
int main(int argc, char *argv[]) {
    int num = 0;
    while (1) {
        printf("-> %d\n", ++num);
        if (num == 5) {
            break;
        }
    }
    printf("-- END --\n");
    return 0;
}

#include <stdio.h>
int main(int argc, char *argv[]) {
    int num = 0;
    do {
        printf("-> %d\n", num);
        if (5 == num++) {
            break;
        }
    } while(1);
    printf("-- END --\n");
    return 0;
}

continue

/** 3 출력을 skip 하는 코드 **/
// -> 1
// -> 2
// -> 4
// -> 5
// -- END --

#include <stdio.h>
int main(int argc, char *argv[]) {
    for(int num = 1; num <= 5; ++num) {
        if (3 == num) {
            continue;
        }
        printf("-> %d\n", num);
    }
    printf("-- END --\n");
    return 0;
}

#include <stdio.h>
int main(int argc, char *argv[]) {
    int num = 0;
    while (num < 5) {
        if (3 == ++num) {
            continue;
        }
        printf("-> %d\n", num);
    }
    printf("-- END --\n");
    return 0;
}

#include <stdio.h>
int main(int argc, char *argv[]) {
    int num = 0;
    do {
        if (3 == ++num) {
            continue;  // ⚠️ do-while 에서 continue 를 잘못하면 while에 도달하지 못하게 된다.
        }
        printf("-> %d\n", num);
    } while(num < 5);
    printf("-- END --\n");
    return 0;
}

중첩 루프

중첩 루프는 c 표준에는 127개로 정의되어 있지만 컴파일러 마다 다르다.

#include <stdio.h>

int main(int argc, char *argv[]) {
    for (int i = 0; i < 5; i++) {    ────────────┐
        printf("=> i: %d\n", i);                 │(1)
        for (int j = 0; j < 5; j++) {   ───┐     │
            if (j % 5 == 3) {              │(2)  │continue  break 
                break;                     │     │근접 루프를 대상으로 한다.
            }                              │     │여기서 break  (2) 탈출한다.
            printf("----- j: %d\n", j);    │     │
        }                               ───┘     │
    }                                ────────────┘
    printf("-- END --\n");
    return 0;
}

// => i: 0
// ----- j: 0
// ----- j: 1
// ----- j: 2
// => i: 1
// ----- j: 0
// ----- j: 1
// ----- j: 2
// => i: 2
// ----- j: 0
// ----- j: 1
// ----- j: 2
// => i: 3
// ----- j: 0
// ----- j: 1
// ----- j: 2
// => i: 4
// ----- j: 0
// ----- j: 1
// ----- j: 2
// -- END --
⚠️ **GitHub.com Fallback** ⚠️