C언어 반복문과 조건문 기타 제어문

    2018-02-04 18:33:14 작성

    break

    break문은 반복문을 빠져나갈때 사용되는 키워드 입니다.
    break문은 가장 가까이 감싸고 있는 반복문 하나를 빠져나옵니다.
    다음은 사용자에게 입력 받은 정수의 합을 구하는 프로그램으로 0을 입력하면 입력한 값의 합 출력하고 종료합니다.

    #include <stdio.h>
    
    int main(void) {
        int number;
        int total = 0;
        while (1) { //무한루프
            printf("정수를 입력하세요 : ");
            scanf("%d", &number);
            if (number == 0) {
                break;  // 0을 입력받으면 탈출
            }
            total += number;
        }
        printf("입력한 수의 합 : %d\n", total);
        return 0;
    }


    continue

    continue문 또한 반복문 안에서 사용되는 키워드입니다
    반복문안에서 continue문을 만나면 실행중인 위치와 상관없이 반복문의 조건검사 위치로 이동(continue 문 아래 명령문은 실행되지 않음) 하게 되며,
    조건이 여전히 참이라면 반복문을 계속 수행합니다.
    다음 예제는 1에서 20까지의 정수 중 2의 배수와 3의 배수를 제외한 수를 출력합니다.

    #include <stdio.h>
    
    int main(void) {
        int i;
        for (i = 1; i <= 20; i++) {
            if (i % 2 == 0 || i % 3 == 0) {
                continue; // 2의 배수 또는 3의 배수이면 건너뜁니다.
            }
            printf("%d ", i);
        }
        printf("\n");
        return 0;
    }

    위에서 본것과 같이 break, continue문은 제어문에서 그 흐름을 중단하거나, 건너뛰는등의 제어를 할 수 있습니다.


    goto

    goto문은 프로그램의 흐름을 원하는 위치로 이동시킬때 사용되는 키워드 입니다.
    goto문은 프로그램의 자연스러운 흐름을 방해하는 단점이 있음으로 사용하지 않는것이 좋습니다.
    goto문이 없어도 조건문과 반복문으로 충분히 자연스러운 흐름의 프로그래밍이 가능하기에 문법적으로 이런게 있구나 정도로만 알아두도록 하세요.

    goto문은 다음과 같은 형식을 갖습니다.

    레이블 :
    	...
    	goto 레이블;
    	...

    레이블(이름)을 사용하여 위치를 지정하고 (여기서는 세미콜론(;)이 아닌 콜론(:)을 사용합니다.)
    goto문을 만나면 해당 레이블로 이동됩니다.
    간단한 goto예제를 하나 보겠습니다.
    프로그램은 짝수를 입력하면 종료됩니다.

    #include <stdio.h>
    
    int main(void) {
    	int i;
    ODD:
        printf("정수를 입력 : ");
        scanf("%d", &i);
    
        switch (i % 2) {
        case 0 : //짝수일때
            printf("짝수를 입력하셧군요!\n");
            goto EVEN; // 아래 EVEN 레이블로 이동
        case 1 :
            printf("홀수를 입력하셧군요!\n");
            goto ODD; //위에 ODD 레이블로 이동
        }
        printf("여기는 실행이 안되요\n");
    EVEN:
        printf("프로그램을 종료 합니다.\n");
        return 0;
    }

    간단한 코드이어도 그 흐름을 한눈에 파악하기 힘들기 때문에 사용하지 마시기 바랍니다.