본문 바로가기
Computer Language/C Language

break, continue, switch, goto 분기문 정리 및 실습 (C언어)

by 방구석 임베디드 2022. 7. 2.
반응형

안녕하세요.

오늘은 추가적인 분기문 문법을 정리하는 시간을 가지도록 하겠습니다.

정확하게 말씀드리면

break, continue, switch, goto  분기문에 대해서 정리하고 실습하는 시간을 가지도록 하겠습니다.

 

1. break란 무엇을 의미하는 것일까?

예를 들어서 아래와 같은 코드가 있다고 가정을 해보도록 하겠습니다.

while 구문에서 계속 반복을 하다가

sum값이 5000을 넘을때 break 라는 구문이 실행이 될 것입니다.

그렇게 되면 

반복문을 감싸고 있는 부분을 바로 빠져나오게 됩니다.

이따 반복문은 가장 가깝게 쌓여진 것 하나를 빠져나오게 됩니다.

그렇다면 한번 돌려 보도록 하겠습니다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
	int sum = 0, num = 0;

	while(1)
	{
		sum += num;
		if (sum > 5000)
			break;
		num++;
	}

	printf("sum: %d \n", sum);
	printf("num: %d \n", num);

	return 0;
}

break는 for 구문에서도 많이 사용합니다.

for 구문에서 계속 돌릴필요없이

for 구문을 통해 원하는 데이터를 찾으면

break를 통하여

반복 구문을 빠져나옴으로

수행시간을 줄일 수 있습니다.

2. continue란 무엇을 의미하는 것일까?

countinue는 나머지는 생략하고 반복조건을 확인하려 바로 이동을 합니다.

예를 들어 보도록 하겠습니다.

아래 코드에서 continue가 실행하게 되면

밑에 빨강박스안에 있는 코드들이 실행되지 않고

바로 while 구문으로 이동을 하게 됩니다.

그렇다면 실습을 한번 해보도록 하겠습니다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
	int num;
	printf("start! ");

	for (num = 1; num < 20; num++)
	{
		if (num % 2 == 0 || num % 3 == 0)
			continue;
		printf("%d ", num);
	}
	printf("end! \n");
	return 0;
}

2와 3의 나머지연산이 0이 나오면 바로 continue가 되어 위로 올라가고 있는 것을 확인 할 수 있습니다.

이것 역시 불필요한 코드를 동작시키지 않도록 하여

수행시간을 줄이는 역할을 합니다.

 

이제 정말 중요한 swtich 문을 한번 확인해 보도록 하겠습니다.

 

3. Swich문이란 무엇인가?

아마도 if만과 더불어서 가장많이 사용하는 분기문이라고 생각하시면 됩니다.

switch안에 n에 값이 1이면 case 1:로 이동하여 구문을 실행합니다.

그리고 break;를 만나면 switch 구문을 빠져나옵니다.

만일 break구문이 없다면

2가전달되면

case 2로 이동이 되고

그리고 printf 구문 2개가 실행되고 

빠져나가지 않고 쭉 실행이 됩니다.

그렇기 때문에 switch 구문을 이해하기 위해서는 break에 대해서 알아야 합니다.

 

break는 switch를 빠져 나가게 합니다.

그렇다면 예제를 한번 알아 보도록 하겠습니다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
	int num;
	printf("1이상 5이하의 정수 입력: ");
	scanf("%d", &num);
	switch (num)
	{
		case 1:
			printf("1은 One \n");
			break;
		case 2:
			printf("2은 Two \n");
			break;
		case 3:
			printf("3은 Three \n");
			break;
		case 4:
			printf("4은 Four \n");
			break;
		case 5:
			printf("5은 Five \n");
			break;
		default:
			printf("I don't know \n");
			break;
	}
	return 0;
}

 

 

만일 여기서 break를 아래와 같이 생략하면 어떻게 나올까요?

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
	int num;
	printf("1이상 5이하의 정수 입력: ");
	scanf("%d", &num);
	switch (num)
	{
		case 1:
			printf("1은 One \n");
			break;
		case 2:
			printf("2은 Two \n");
			break;
		case 3:
			printf("3은 Three \n");
		case 4:
			printf("4은 Four \n");
		case 5:
			printf("5은 Five \n");
		default:
			printf("I don't know \n");
	}
	return 0;
}

아래와 같이 쭉 나오게 됩니다.

그렇다면 if else 구문이 더 좋을까요

swich가 더 좋을까요?

우리는 어떻게든 구현할수 있습니다.

저는 개인적으로 switch를 더 선호합니다.

이유는 조건을 계속 확인할 필요가 없기 때문입니다.

그래서, 최적설계를 수행하는 과정에서는 swich로 코드를 수정합니다.

4. goto 문이란 무엇을 의미하는 것인가?

사실 goto문은 잘 사용하지 않습니다.

그래서 한번 확인해 보도록 하겠습니다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
	int num;
	printf("자연수 입력: ");
	scanf("%d", &num);

	if (num == 1)
		goto ONE;
	else if (num == 2)
		goto TWO;
	else
		goto OTHER;

ONE:
	printf("1을 입력하셨습니다! \n");
	goto END;
TWO:
	printf("2을 입력하셨습니다! \n");
	goto END;
OTHER:
	printf("1,2가 아닌 값을 입력했습니다. \n");
	goto END;
END:
	return 0;
}

이상으로 break, continue, switch, goto 분기문에 대해서 정리를 마치도록 하겠습니다.

반응형

댓글