C언어_기타 제어문에 대해 알아보자 (break,continue,goto,return)
기타제어문 ?
프로그램의 흐름과 처리 순서 등을 조절하는 제어문들을 말한다.
기타 제어문의 종류로는 break,continue,goto,return이 있으며
break와 continue는 반복문에서 주로 사용하고, goto와 return은 프로그램의 실행 순서에 관여할때 주로 사용된다.
먼저, 반복문에서 주로 사용되는 break와 continue에 대해 알아보도록 하자.
1) break
break는 반복문에서 주로 사용되는데 '실행중인 코드를 빠져나가는 역할'을 한다.
do~while문을 보며 반복문을 빠져나가는 상황으로는 조건식의 결과가 거짓이 되거나 ctrl+c를 누를때였다.
이때 논리적으로 빠져나가는 것이 있는데, 바로 break문을 사용하여 빠져나가는 것이다.
반복문 안에서 break문을 만나게되면 무조건 반복문을 빠져나온다.
그 과정을 예제로 확인해보자.
위 코드는 1부터 100까지의 합 중 최초로 1000이 넘는 위치를 구하는 for문을 이용한 반복문이다.
여기서, if(hap>=1000) break;를 사용하여 hap의 값이 1000보다 크거나 같을 시 break문을 만나 루프를 빠져나오게 된다.
실행결과
2) continue
반복문 실행 도중 continue를 만나면 다시 처음으로 돌아가서 처음부터 반복문을 수행하게 된다.
3의 배수를 제외한 숫자를 더하는 프로그램을 작성하며 설명하도록 하겠다.
위 소스코드를 보면, 변수 hap엔 0, i는 1을 선언해주었다.
for문은 1부터 100까지 증가하며 실행될것이다.
안에 있는 if(i%3==0)은 i의 값을 3으로 나눌 시 나머지가 0, 즉 3의 배수를 뜻한다.
이 if문의 조건에 충족하는 값을 만날시 continue로 넘어가 다시 for문을 실행하게 된다.
거짓일 시엔 if continue를 실행하지 않고 그 밑에 있는 hap=hap+i;를 실행하며 프로그램이 계속 돌아가게 될 것이다.
실행결과
if(i%3==0) continue;를 이용해 3의 배수를 제외한 hap의 값을 구할 수 있었다.
3) goto
goto함수를 이용할 때 레이블을 지정해야합니다.
goto 레이블; 을 지정하면 지정한 레이블로 바로 넘어가게 됩니다.
goto는
goto 레이블;
레이블 이름:
이러한 방식으로 사용하게 됩니다.
예를 들어
goto mygoto;
mygoto: printf("hello!")
이런 식으로 goto함수를 사용할 수 있습니다.
원하는 값을 구하고 멈추고 출력할 때 주로 사용됩니다만 프로그램의 흐름을 복잡하게 만들기 때문에 코드가 길어질 경우 버그를 초래할 수 있기 때문에 사용을 권장하지는 않고 있습니다..
goto 함수를 이용해 1~100까지의 합계를 구하는 도중 누적된 계산값이 2000이 넘으면 오류 메세지를 출력하고 프로그램을 종료시키는 프로그램을 작성해보겠습니다.
소스코드에 대해 설명해드리겠습니다.
hap의 초기화값을 0으로 설정했고, 변수 i는 1으로 설정하였습니다.
for과 if에 대한 설명은 앞에 나온 포스팅에 해드렸으니 참고해서 봐주시면 감사하겠습니다.
만약 hap의 값이 2000을 넘으면, 바로 다음에 작성한 goto함수로 넘어가게 됩니다.
만약 hap의 값이 2000을 넘게 되면 for문을 빠져나와 설정해둔 mygoto라는 레이블으로 바로 넘어가게 됩니다.
따라서 mygoto에 설정한 printf를 실행하게 됩니다.
실행 결과
4) return
return에 대해서는 간단하게 알아보겠습니다.
return함수는 현재 함수를 호출한 곳으로 돌아가게 하는 함수입니다.
보통 main함수에서의 return은 프로그램을 종료한다는 의미로 사용됩니다.
return EXIT_SUCCESS; = return 0;
return EXIT_FAUSE; = return 1;
같은말입니다.
보통 성공적으로 프로그램이 종료되면 return 0을 사용하고,
비정상적으로 프로그램이 종료될때 return 1이 사용된다고 생각하면 쉽습니다.
일단 여기서 저희가 알아볼것은, 중간에 return값이 있으면 어떻게되는지를 알아볼겁니다.
보통은 return함수를 맨 밑에 써주지만, return함수의 활용도를 알아보기 위해 중간에 놓아보았습니다.
만약 return 0이 이 소스코드의 맨 밑에 위치한다면 실행결과창에는 1부터 1000까지 합은 5050입니다. 프로그램의 끝입니다. 가 출력될것입니다.
하지만 위 소스코드에서 return 0은 printf("1부터 1000까지의 합은 %d입니다. \n",hap);에 위치하고 있습니다.
이 프로그램을 실행하게 되면 printf("프로그램의 끝입니다.");를 실행하지 않고, return 0값이 있는 곳에서 함수를 호출한 곳으로 돌아가게 되고 소스코드는 종료됩니다.
그러므로 "프로그램의 끝입니다."는 출력되지 않습니다.
실행결과
break : 결과가 참일 시 프로그램을 멈추는 역할을 함.
continue : 결과가 참일 시 프로그램을 멈추는 역할을 함.
goto : 레이블을 설정하여 goto함수를 사용하면 지정한 레이블으로 바로 넘어가며 지정된 레이블에 있는 값을 실행시킴
return : 현재 함수를 호출한 곳으로 돌아감.