goto

Jaemyeong Lee·2024년 8월 4일
0

FastCampusC++

목록 보기
20/78

첫 번째 블록 (무한 루프)

{
    // 무한 루프
    //go:
    //    cout << 1 << endl;
    //    goto go;
}
  1. 주석 처리된 부분은 goto 문을 사용하여 무한 루프를 만드는 예제입니다.
  2. go: 레이블을 정의하고, "1"을 출력한 후 goto go;를 사용하여 go 레이블로 이동합니다.
  3. 이 구조는 무한 루프를 생성합니다.

두 번째 블록 (조건에 따른 분기)

{
    int num = 5;
    if (num % 3 == 0)
        goto go;
    if (num % 5 == 0)
        goto go;
    cout << "can't divide 3 and 5" << endl;

go:
    cout << "wow" << endl;
}
  1. num 변수를 5로 초기화합니다.
  2. num이 3의 배수인지 확인하고, 그렇다면 go 레이블로 이동합니다.
  3. num이 5의 배수인지 확인하고, 그렇다면 go 레이블로 이동합니다.
  4. 두 조건 모두 만족하지 않으면 "can't divide 3 and 5"를 출력합니다.
  5. go: 레이블로 이동하여 "wow"를 출력합니다.
  6. 이 구조는 특정 조건에서 코드 블록을 건너뛰도록 합니다.

세 번째 블록 (팩토리얼 계산)

{
    // 팩토리얼
    int num;
    cin >> num;

    int total = 1;
multiply:
    total *= num;
    if (--num >= 1)
        goto multiply;

    cout << total << endl;
}
  1. 사용자로부터 정수 num을 입력받습니다.
  2. total 변수를 1로 초기화합니다.
  3. multiply: 레이블로 이동하여 totalnum을 곱합니다.
  4. num을 1 감소시키고, num이 1 이상이면 multiply 레이블로 이동합니다.
  5. num이 1보다 작아지면 루프가 종료되고, total을 출력합니다.
  6. 이 구조는 goto 문을 사용하여 팩토리얼 계산을 반복합니다.

네 번째 블록 (알파벳 출력)

{
    // 알파벳 출력
    char ch = 'a';
alpha:
    cout << ch << endl;
    if (++ch <= 'z')
        goto alpha;
}
  1. ch 변수를 'a'로 초기화합니다.
  2. alpha: 레이블로 이동하여 ch를 출력합니다.
  3. ch를 1 증가시키고, ch가 'z' 이하이면 alpha 레이블로 이동합니다.
  4. ch가 'z'보다 커지면 루프가 종료됩니다.
  5. 이 구조는 goto 문을 사용하여 'a'부터 'z'까지의 알파벳을 출력합니다.

다섯 번째 블록 (피보나치 수열)

{
    // 피보나치 수열
    // 0, 1, 1, 2, 3, 5, 8, 13, 21
    // a(0) = 0, a(1) = 1
    // a(n) = a(n - 2) + a(n - 1)

    int num;
    cin >> num;

    if (num <= 1)
        cout << num << endl;
    else
    {
        int prevValue = 0;
        int currValue = 1;

    add:
        int nextValue = prevValue + currValue;
        prevValue = currValue;
        currValue = nextValue;
        if (--num - 1)
            goto add;
        cout << currValue << endl;
    }
}
  1. 사용자로부터 정수 num을 입력받습니다.
  2. num이 1 이하이면 num을 출력합니다.
  3. 그렇지 않으면 피보나치 수열을 계산합니다.
    • prevValue를 0으로, currValue를 1로 초기화합니다.
    • add: 레이블로 이동하여 다음 피보나치 수를 계산합니다.
    • prevValuecurrValue를 갱신합니다.
    • num을 1 감소시키고, num - 1이 0 이상이면 add 레이블로 이동합니다.
  4. 루프가 종료되면 currValue를 출력합니다.
  5. 이 구조는 goto 문을 사용하여 피보나치 수열을 계산합니다.

정리

goto 문은 코드의 특정 위치로 분기할 때 사용됩니다. 그러나 코드의 가독성과 유지보수성을 떨어뜨릴 수 있으므로, 일반적으로는 반복문 (for, while, do-while)과 조건문 (if, switch)을 사용하는 것이 좋습니다. 예제에서는 goto 문을 사용하여 무한 루프, 조건에 따른 분기, 팩토리얼 계산, 알파벳 출력, 피보나치 수열 계산 등을 구현하였습니다.

profile
李家네_공부방

0개의 댓글