4.6 break명령     [doc]     [smts]

 break 명령은 전 절에서 소개한 switch 명령과 반복문 안에서만 쓰이며 이 명령을 만나면 그것을 둘러싸고 있는 가장 안 쪽의 반복문 하나를 빠져 나온다.


다음의 간단한 예를 보자.


0406-01.c
for (int ia=0; ia<10; ia++) {
printf(“%d\n”,ia);
if (ia==3)
break;
}

이 프로그램의 결과는


0

1

2

3


이다. 왜냐면 ia가 3이라면 break 명령이 수행되어 for반복문 밖으로 빠져나오기 때문이다.


0406-02.c
int ia;
while(1) {
scanf(“%d”,&ia);
if (ia==0)
break
else
printf(“you typed %d.”,ia);
}

이 예는 사용자가 입력한 정수가 0 이 되면 break 명령을 만나서 무한 루프를 빠져나오는 것이다.


 또 다른 예로 사용자로부터 숫자(정수)를 입력받는데 정해진 입력이 아니면 다시 입력하도록 하는 것을 생각해 보자. 가상의 로봇에 대한 입력이 1번, 2번, 3번만 있는 경우 나머지 경우에 대해서는 다시 입력하도록 하려면 다음 예 break_ex01 과 같이 반복문과 break명령을 조합하여 사용하면 된다.


0406-03.c
#include <stdio.h>
int main(void)
{
  char cIn;
  printf("1. Turn left.\n");
  printf("2. Turn right.\n");
  printf("3. Stop.\n ");
  printf("Choose one : ");
  while(1) {
      scanf("%d", &cIn);
      if (cIn==1 || cIn==2 || cIn==3)
          break;
      printf("Wrong! Input again : ");
  }
}

이 예를 보면 while 반복문 안에서 scanf()함수에 의해서 하나의 정수를 입력받게 되어 있다. 입력받은 정수가 1, 2, 혹은 3이라면 break명령에 의해서 바로 반복문을 빠져 나가고 아니라면 scanf()함수가 반복되어 호출되도록 되어 있다. 이렇게 함으로서 올바른 숫자가 입력될 때까지 반복해서 입력을 받게끔 할 수 있다.


1. Turn left.
2. Turn right.
3. Stop.
Choose one : 5
Wrong! Input again : 1

또 다른 예를 들어보자. 소수(prime number)란 1과 그 자신의 수로만 나누어 떨어지는 수이다. 1000이하의 소수 중 가장 큰 것을 찾는 프로그램을 작성하고자 한다고 하자. 이 경우는 1000부터 하나씩 줄어가면서 소수인지 아닌지를 판별하는 것이 나을 것이다.


0406-04.c
#include <stdio.h>
int main() {
  for (int ia = 1000; ia>=2; ia--) {
      int ib = 2;
      while(ib < ia/2 ) {
          if (ia%ib == 0) break;
          ib++;
      }
      if (ib == ia/2 +1) {                  //❶
          printf("result: %d\n", ia);  //❷
          break;
      }
  }
}

이 예제에서 for문 안을 눈여겨보자. while 반복이 끝나고 ❶번줄로 넘어왔을 때 ib 변수값이 (ia/2+1)과 같다면 while반복문이 그 안의 break문을 만나지 않고 종료되었다는 의미이므로 (즉, 이것은 ia를 2 ~ (ia/2) 사이의 값으로 나눴을 때 한 번도 0이 되지 않았음을 의미한다) ia는 소수이다. 따라서 이 경우 바깥쪽 for반복문도 빠져나가게끔 되어 있다. 만약 while 반복이 끝나고 ❶번 줄로 넘어왔을 때 ib 변수값이 ia와 같지 않다면 이것은 2~(ia-1) 사이의 값으로 나눴을 때 어디선가 나머지가 0이라는 말이므로 소수가 아니라는 뜻이다. 따라서 다음 ia값을 다시 검사해야 된다. for문 바깥인 ❷로 빠져 나간 후 ia값을 printf()함수에 의해서 화면에 표시한다.


 이 예제를 이해했다면 for, while, break 에 대해서 어느 정도 이해를 했다고 볼 수 있다.


'프로그래밍언어.Lib > C,C++' 카테고리의 다른 글

C/C++의 goto 명령  (0) 2015.05.19
C/C++의 continue 명령  (0) 2015.05.19
C/C++ 의 do ~ while 반복문  (0) 2015.05.18
C/C++ 의 while 반복문  (0) 2015.05.18
C/C++의 for 반복문  (0) 2015.05.18
Posted by 살레시오
,