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이므로 루프는 계속해서 반복된다.
번역: 이 포스트의 원문은 http://www.learncpp.com/cpp-tutorial/58-break-and-continue/ 입니다.