본문으로 바로가기

[ 7. C언어의 기본 - 기타제어문 ]

category Algorithm/C언어 2021. 10. 11. 15:08

 

기타제어문 ( break, continue, goto, return)

c언어의 기타 제어문 (break , continue , goto, return)에 대해서 알아보자.

 

 break와 continue는 반복문에서 주로 사용하고,

goto와 return은 프로그램의 실행 순서에 관여할 때 주로 사용된다.

 

1) break 

break는 반복문에서 주로 사용되는데 "실행중인 코드를 빠져나가는 역할"을 한다.

예로 들어, 자동차에 있는 브레이크를 생각할 수 있다.

자동차가 달리던 중 빨강 신호를 발견하고 차를 멈췄다. 프로그래밍도 비슷하다.

반복문을 처리하다가 빨강 신호를 발견하면 현재 하던 작업을 중지한다.

  

반복문 안에서 break문을 만나게되면 무조건 반복문을 빠져나오게 된다.

 

예제를 살펴보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
 
int main(){
 
  int hap = 0;
  int i;
 
  for (i = 1; i <= 100; i++)
  {
    hap += i;
 
    if (hap >= 3210)
      break;
  }
 
  printf("1~100의 합 중 최초로 3210이 넘는 위치는? : %d\n", i);
 
  return 0;
}

결괏값 : 80
 
cs

위 코드는 1부터 100까지의 합 중 최초 3210이 넘는 위치를 구하는 for문을 이용한 반복문이다.

여기서 for문 안에 if문 hap >= 3210 break;를 사용하여 값이 3210 보다 크거나 같을 시 break를 만나 루프를

빠져나오게 된다.

 

2) continue 

반복문 실행 도중 continue를 만나면 다시 처음으로 돌아가서 처음부터 반복문을 수행하게 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
 
int main(){
 
  int hap = 0;
  int i;
 
  for ( i = 1; i <= 100; i++)
  {
    if ( i % 3 == 0)
      continue;
 
    hap += i;
  }
 
  printf("1~100까지의 합 (3의 배수 제외) : %d\n", hap);
}
 
 
cs

for문을 보면 1부터 100까지 증가하면서 실행될것이다.

for문 안에 있는 조건문 if문 i % 3 =- 0은 i를 3으로 나눌 시 나머지가 0, 즉 3의 배수를 뜻한다.

이 if문의 조건에 충족하는 값을 만날 시 contunue로 넘어가 다시 for문을 실행하게 된다.

거짓일 시 if contuinue를 실행하지 않고 그 밑에 있는 hap = hap + i를 실행하며 프로그램이

계속 돌아갈 것이다.

 

예제를 한번 더 보도록 하자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
 
int main(){
 
  int i = 0;
 
  for (i = 1; i <= 30; i++)
  {
    if (i >= 1 && i <= 5)
    {
      if ( i == 3)
      {
         printf("옆에 학생이 3번 학생은 결석이라고 말해준다.\n");
      }
      printf("%d 번 출석했습니다.\n", i);
    }
  }
}
 
cs

30명의 학생들이 강의실에 들어와서 교수는 출석체크를 하려고 한다.

교수가 먼저 1~5번 까지의 학생 이름을 부르면 학생들은 몇번 출석했습니다 라고 대답을 해야 출석이 인정된다.

 

위 코드를 보면 (for <= 30) 30명까지의 학생들이 있는 것을 확인할 수 있다.

for문 안에는 if문( i >=1 && i <= 5) 1~5번까지의 학생들 먼저 출석을 부르는 것을 볼 수 있고

if문 안에 if문 3번 학생이 몸이 안좋아서 결석을 하여 옆 학생이 대신 말해주는 코드이다.

 

실행해보면,

3번 학생이 결석이라고 교수에게 전달했는데, 3번 출석했다니??

이 머쓱타드인 상황을 해결하기 위해 continue 문이 도와주어야 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
 
int main(){
 
  int i = 0;
 
  for (i = 1; i <= 30; i++)
  {
    if (i >= 1 && i <= 5)
    {
      if ( i == 3)
      {
         printf("옆에 학생이 3번 학생은 결석이라고 말해준다.\n");
         continue;
      }
      printf("%d 번 출석했습니다.\n", i);
    }
  }
}
 
cs

이렇게 continue 문이 들어가야 결과가 이렇게 나올 수 있다.

위 코드에서 i가 3인 상태에서 continue를 만나게 되면 아래 출력문은 건너뛰고 

i가 4인 반복문으로 넘어가게 되는 것이다.

 

 3) goto문 

다중 루프(loop, 반복문 등)에서 한 번에 탈출하기 위해서 goto 문을 사용한다.

잘 사용하지는 않지만 한번 알아만 보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
 
int main(){
 
  int hap = 0;
  int i;
 
  for ( i = 1; i <= 100; i++)
  {
    hap += i;
 
    if ( hap > 1000)
      goto gototest;
  }
 
  gototest:
    printf("1부터 %d까지 합하면 1000이 넘습니다.\n", i);
 
    return 0;
}
 
cs

goto 함수를 이용할 때 위처럼 레이블을 지정해야 한다.

goto 레이블; 위 코드에선 goto gototest; 을 지정하면 지정한 레이블로 바로 넘어가게 된다.

 

예를 들어

goto gototest;

gototest:  printf("나는 ooo이다.");

이런 식으로 goto 함수를 사용할 수 있다.

 

원하는 값을 구하고 멈추고 출력할 때 주로 사용되긴 하지만

프로그램의 흐름을 복잡하게 만들기 때문에 코드가 길어질 경우 버그를 초래할 수 있기 때문에

사용을 권장하진 않는다. 

 

4) retrun

return 함수는 현재 함수를 호출한 곳으로 돌아가게 하는 함수이다.

 

보통 main 함수에서의 return은 프로그램을 종료한다는 의미로 사용되고있다.

 

return EXIT_SECCESS; = return 0;

return EXIT-FAUSE; = return 1;

보통 성공적으로 프로그램이 종료되면 return 0을 사용하고,

비정상적으로 종료될 때 ruturn 1이 사용된다고 생각하면 쉽다.

 

엄청 쉽게 예제로 설명하면

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
int main(){
 
  printf("안");
  printf("녕");
  printf("하");
 
  return 0;
  printf("세");
  printf("요");
}
 
cs

보통은 return 함수를 맨 밑에 써주지만 return 함수의 활용도를 알아보기 위해 중간에 놓아보았다.

만약 return 0이 소스코드의 맨 밑에 위치한다면 실행결과창에선 안녕하세요가 출력될 것이다.

하지만 위 소스코드에서 return 0은 중간에 위치하고 있다.

이 프로그램을 실행하면 어떻게 출력될까?

결과를 보면 "안녕하" 까지만 출력되는 것을 볼 수 있다. 즉, return 0 값이 있는 곳에서 함수를 호출한 곳으로

돌아가게 되고 소스코드는 종료된다.

그러므로 "세요"는 출력되지 않는다.

 

기타제어문을 정리해보자.

 

break :  결과가 참일 시 프로그램을 멈추는 역할

continue : 결과가 참일 시 프로그램을 멈추는 역할

goto : 레이블을 설정하여 goto 함수를 사용하면 지정한 레이블로 바로 넘어가며 지정된 레이블에 있는 값 실행

return : 현재 함수를 호출한 곳으로 돌아감