..

Search

20) 기타 제어문

20) 기타 제어문

기타 제어문


루프의 제어

일반적으로 조건식의 검사를 통해 루프로 진입하면, 다음 조건식을 검사하기 전까지 루프 안에 있는 모든 명령문을 실행합니다.

하지만 continue 문과 break 문은 이러한 일반적인 루프의 흐름을 사용자가 직접 제어할 수 있도록 해줍니다.


continue 문

continue 문은 루프 내에서 사용하여 해당 루프의 나머지 부분을 건너뛰고, 바로 다음 조건식의 판단으로 넘어가게 합니다.

보통 반복문 내에서 특정 조건에 대한 예외 처리를 하고자 할 때 자주 사용됩니다.

 

다음 예제는 1부터 100까지의 정수 중에서 3의 배수를 제외하고 출력하는 예제입니다.

예제

int i;

int except_num = 3;  

 

for (i = 1; i <= 100; i++)

{

    if (i % except_num == 0)

    {

        continue;

    }

    printf("%d ", i);

}  

코딩연습 ▶

실행 결과

1

2

4

5

7

...

97

98

100

 

위의 예제에서 변수 i의 값이 3의 배수인 경우에는 continue 문을 이용하여 for 문의 printf() 함수 부분을 건너뛰고 있습니다.


break 문

break 문은 루프 내에서 사용하여 해당 반복문을 완전히 종료시킨 뒤, 반복문 바로 다음에 위치한 명령문을 실행합니다.

즉 루프 내에서 조건식의 판단 결과에 상관없이 반복문을 완전히 빠져나가고 싶을 때 사용합니다.

 

다음 예제는 1부터 10까지의 합을 구하는 예제입니다.

예제

int start_num = 1;

int end_num = 10;

int sum = 0;  

 

while (1)

{

    sum += start_num;

    if (start_num == end_num)

    {

        break;

    }

    start_num++;

}

코딩연습 ▶

실행 결과

1부터 10까지 더한 값은 55입니다.

 

위의 예제에서는 변수 start_num의 값이 end_num의 값과 같아지면, 무조건 while 문을 종료하게 됩니다.

 

다음 예제는 구구단에서 5단까지 각 단의 수만큼만 출력하는 예제입니다.

예제

int i, j;  

 

for (i = 2; i <= 5; i++)

{

    for (j = 1; j <= 9; j++)

    {

        printf("%d * %d = %d\n", i, j, i * j);

        if (i == j)

        {

            printf("\n");

            break;

        }

    }

} 

코딩연습 ▶

실행 결과

2 * 1 = 2

2 * 2 = 4

 

3 * 1 = 3

3 * 2 = 6

3 * 3 = 9

 

4 * 1 = 4

4 * 2 = 8

4 * 3 = 12

4 * 4 = 16

 

5 * 1 = 5

5 * 2 = 10

5 * 3 = 15

5 * 4 = 20

5 * 5 = 25

 

위의 예제는 두 개의 for 문을 중첩해서 사용하여 구구단을 출력하고 있습니다.

이때 내부의 for 문은 변수 i와 j의 값이 같아지면, break 문을 호출하여 내부의 for 문을 빠져나갑니다.

따라서 구구단의 각 단이 해당 단의 수만큼만 출력될 수 있습니다.


goto 문

goto 문은 프로그램의 흐름을 지정된 레이블(label)로 무조건 변경시키는 명령문입니다.

goto 문은 다른 제어문과는 달리 아무런 조건 없이 프로그램의 흐름을 옮겨줍니다.

따라서 가장 손쉽게 사용할 수 있지만, 반면에 프로그램의 흐름을 매우 복잡하게 만들기도 합니다.

이러한 단점 때문에 현재는 디버깅 이외에는 거의 사용되지 않습니다.


연습문제