goto는 코딩 중 원하는 부분으로 건너뛰어야하는 상황에서 사용하는 제어문이다.
goto는 별다른 제약 조건 없이 원하는 부분으로 이동할 수 있기 때문에 자칫 잘못하면 남발하여 사용할 수 있는데,
그렇게되면 코드가 너무 부해져 가독성이 떨어지게 된다.
하지만 적절히 사용하면 중복되는 코드를 없앨 수 있고, 코드를 좀 더 간결하게 만들 수 있다.
goto와 레이블 사용하기
goto는 레이블을 지정해서 사용한다.
- goto 레이블;
- 레이블:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int num1;
scanf("%d", &num1);
if (num1 == 1) // num1가 1이라면
goto ONE; // ONE으로 goto
else if (num1 == 2) // num1가 2라면
goto TWO; // TWO로 goto
else // 1과 2가 아니라면
goto EXIT; // EXIT로 goto
ONE: // 레이블 ONE
printf("1입니다.\n");
goto EXIT;
TWO: // 레이블 TWO
printf("2입니다.\n");
goto EXIT;
EXIT: // 레이블 EXIT
return 0;
}

하지만 이렇게 덕지덕지 goto를 사용하는 것을 스파게티 코드라고 한다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int num1;
scanf("%d", &num1);
if (num1 == 1)
printf("1입니다.\n");
else if (num1 == 2)
printf("2입니다.\n");
return 0;
}
그냥 이렇게 코딩하면 끝나는 걸 굳이 goto로 늘려서 할 필요는 없다.
중첩 루프 빠져나오기
goto없이 중첩루프를 빠져나와보자.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdbool.h>
int main()
{
int num1 = 0;
bool exitOuterLoop = false;
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
if (num1 == 50)
{
exitOuterLoop = true;
break;
}
num1++;
}
if (exitOuterLoop == true)
break;
}
printf("%d\n", num1);
return 0;
}
여기서 break문의 특징은 현재 루프만 끝낸다는 것이다.
따라서 중첩루프의 안쪽 루프에서 break를 사용한다면 안쪽 루프만 끝낼 뿐
바깥쪽 루프는 열심히 돌아간다.
그래서 여기에서는 불값 exitOuterLoop를 사용해서 바깥쪽 루프도 끝내겠다고 결정을 해주었다.
하지만 goto를 사용하면 간단하게 루프를 빠져나올 수 있다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int num1 = 0;
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
if (num1 == 20)
goto EXIT;
num1++;
}
}
EXIT:
printf("%d\n", num1);
return 0;
}
num1 이 20이 되면 goto를 통해 그냥 밖으로 나온다.
goto는 다중루프를 빠져나올 때 유용하다. 여기서는 for 반복문을 예로 들었지만
while, do while로 된 중첩 루프도 빠져나올 수 있다.
'C, C++' 카테고리의 다른 글
[C언어] 약수 구하기 (0) | 2022.04.28 |
---|---|
[C언어] FizzBuzz / 삼항연산자 중첩 (2) | 2022.04.28 |
[C언어] for문 별 찍기 2편 (0) | 2022.04.28 |
[C언어] for문 별 찍기 1편 (0) | 2022.04.27 |
C언어 코딩도장(break, continue로 반복문 제어하기) (0) | 2022.04.27 |
goto는 코딩 중 원하는 부분으로 건너뛰어야하는 상황에서 사용하는 제어문이다.
goto는 별다른 제약 조건 없이 원하는 부분으로 이동할 수 있기 때문에 자칫 잘못하면 남발하여 사용할 수 있는데,
그렇게되면 코드가 너무 부해져 가독성이 떨어지게 된다.
하지만 적절히 사용하면 중복되는 코드를 없앨 수 있고, 코드를 좀 더 간결하게 만들 수 있다.
goto와 레이블 사용하기
goto는 레이블을 지정해서 사용한다.
- goto 레이블;
- 레이블:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int num1;
scanf("%d", &num1);
if (num1 == 1) // num1가 1이라면
goto ONE; // ONE으로 goto
else if (num1 == 2) // num1가 2라면
goto TWO; // TWO로 goto
else // 1과 2가 아니라면
goto EXIT; // EXIT로 goto
ONE: // 레이블 ONE
printf("1입니다.\n");
goto EXIT;
TWO: // 레이블 TWO
printf("2입니다.\n");
goto EXIT;
EXIT: // 레이블 EXIT
return 0;
}

하지만 이렇게 덕지덕지 goto를 사용하는 것을 스파게티 코드라고 한다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int num1;
scanf("%d", &num1);
if (num1 == 1)
printf("1입니다.\n");
else if (num1 == 2)
printf("2입니다.\n");
return 0;
}
그냥 이렇게 코딩하면 끝나는 걸 굳이 goto로 늘려서 할 필요는 없다.
중첩 루프 빠져나오기
goto없이 중첩루프를 빠져나와보자.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdbool.h>
int main()
{
int num1 = 0;
bool exitOuterLoop = false;
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
if (num1 == 50)
{
exitOuterLoop = true;
break;
}
num1++;
}
if (exitOuterLoop == true)
break;
}
printf("%d\n", num1);
return 0;
}
여기서 break문의 특징은 현재 루프만 끝낸다는 것이다.
따라서 중첩루프의 안쪽 루프에서 break를 사용한다면 안쪽 루프만 끝낼 뿐
바깥쪽 루프는 열심히 돌아간다.
그래서 여기에서는 불값 exitOuterLoop를 사용해서 바깥쪽 루프도 끝내겠다고 결정을 해주었다.
하지만 goto를 사용하면 간단하게 루프를 빠져나올 수 있다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int num1 = 0;
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
if (num1 == 20)
goto EXIT;
num1++;
}
}
EXIT:
printf("%d\n", num1);
return 0;
}
num1 이 20이 되면 goto를 통해 그냥 밖으로 나온다.
goto는 다중루프를 빠져나올 때 유용하다. 여기서는 for 반복문을 예로 들었지만
while, do while로 된 중첩 루프도 빠져나올 수 있다.
'C, C++' 카테고리의 다른 글
[C언어] 약수 구하기 (0) | 2022.04.28 |
---|---|
[C언어] FizzBuzz / 삼항연산자 중첩 (2) | 2022.04.28 |
[C언어] for문 별 찍기 2편 (0) | 2022.04.28 |
[C언어] for문 별 찍기 1편 (0) | 2022.04.27 |
C언어 코딩도장(break, continue로 반복문 제어하기) (0) | 2022.04.27 |