소년코딩

06.07 - break, continue

break

'06-02 - swith 문' 포스트에서 break 문을 설명한 적 있지만, 다른 종류의 루프에서도 사용할 수 있기 때문에 더 설명할 내용이 있다. break 문은 do, for, switch 또는 while 문을 종료시킨다.

Breaking a switch

switch 문에서, 각 case 끝에는 case가 완료되었음을 나타내기 위해 break 문을 사용한다.

switch (ch)
{
    case '+':
        doAddition(x, y);
        break;
    case '-':
        doSubtraction(x, y);
        break;
    case '*':
        doMultiplication(x, y);
        break;
    case '/':
        doDivision(x, y);
        break;
}

Breaking a loop

루프(반복문)에서 break 문을 사용해서 루프를 일찍 종료시킬 수 있다.

#include <iostream>

int main()
{
    int sum = 0;

    // Allow the user to enter up to 10 numbers
    for (int count=0; count < 10; ++count)
    {
        std::cout << "Enter a number to add, or 0 to exit: ";
        int num;
        std::cin >> num;

        // exit loop if user enters 0
        if (num == 0)
            break;

        // otherwise add number to our sum
        sum += num;
    }

    std::cout << "The sum of all the numbers you entered is " << sum << "\n";

    return 0;
}

위 프로그램을 사용하면 최대 10개의 숫자를 입력할 수 있으며 마지막에 입력한 모든 숫자의 합계를 출력한다. 사용자가 0을 입력하면 break 문으로 인해 루프가 일찍 종료된다.

break 문은 무한 루프를 벗어나는 데도 사용할 수 있다.

#include <iostream>

int main()
{
    while (true) // 무한 루프
    {
        std::cout << "Enter 0 to exit or anything else to continue: ";
        int num;
        std::cin >> num;

        // 사용자가 0을 입력하면 루프를 종료한다.
        if (num == 0)
            break;
    }

    std::cout << "We're out!\n";

    return 0;
}

break vs return

초보 프로그래머는 종종 break와 return 문의 차이를 어려워한다.

  • break 문은 switch 또는 루프를 종료하고, 밖의 첫 번째 문에서 실행을 계속한다.
  • return 문은 switch 또는 루프가 있는 전체 함수를 종료하고, 함수가 호출된 지점에서 실행을 계속한다.
#include <iostream>

int breakOrReturn()
{
    while (true) // 무한 루프
    {
        std::cout << "Enter 'b' to break or 'r' to return: ";
        char ch;
        std::cin >> ch;

        if (ch == 'b')
            break; // 루프 밖의 첫 번째 명령문에서 실행이 계속된다.

        if (ch == 'r')
            return 1; // return을 호출하면 함수가 호출자에게 즉시 반환된다 (이 경우 main()).
    }

    // break를 실행하면 여기서부터 실행된다. (루프 밖의 첫 번째 명령문)
    std::cout << "We broke out of the loop\n";

    return 0;
}

int main()
{
    int returnValue = breakOrReturn();
    std::cout << "Function breakOrContinue returned " << returnValue << '\n';

    return 0;
}

continue

continue 문은 현재 루프 몸체의 끝으로 이동하는 편리한 방법을 제공한다. 현재 반복을 일찍 종료하고자 할 때 유용하다.

쉽게 말해서 coninute 문을 사용하여 일부 코드를 실행하지 않고 점프할 수 있다.

for (int count=0; count  < 20; ++count)
{
    // 숫자가 4로 나눌 수 있는 경우 이 반복을 건너뛴다.
    if ((count % 4) == 0)
        continue; // 루프 몸체 끝으로 점프한다.

    // 숫자가 4로 나눌 수 없는 경우 계속된다.
    std::cout << count << std::endl;

    // continue 문은 여기로 이동시킨다.
}

위 프로그램은 0부터 19까지 4로 나눌 수 없는 모든 숫자를 출력한다.

while 또는 do-while 루프에서 continue 문을 사용할 때는 주의해야 한다. 이러한 루프는 일반적으로 루프 몸체에서 루프 변수를 증가시키기 때문에 continue 문을 사용하면 무한 루프가 될 수 있다.

int count(0);
while (count < 10)
{
    if (count == 5)
        continue; // 루프 몸체 끝으로 점프한다.
    std::cout << count << " ";
    ++count;

    // The continue statement jumps to here
}

프로그래머의 의도는 5를 제외하고 0부터 9까지의 숫자를 출력하려는 것이다. 그러나 위 프로그램은 실제로 다음과 같이 출력한다.

0 1 2 3 4

4까지 출력하고 무한 루프가 된다. count가 5이면 if 문은 true로 평가되고 루프는 맨 아래로 이동한다. 여기서 문제점은 점프했기 때문에 count가 증가하지 않는다. 따라서 다음 반복문에서 count는 여전히 5이므로 루프는 계속해서 반복된다.


cpp 번역: 이 포스트의 원문은 http://www.learncpp.com/cpp-tutorial/58-break-and-continue/ 입니다.

댓글 로드 중…

블로그 정보

소년코딩 - 소년코딩

소년코딩, 자바스크립트, C++, 물리, 게임 코딩 이야기

최근에 게시된 이야기