ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C# goto문 작성방법
    닷넷/C# 2018. 6. 28. 17:01
    반응형

    goto는 프로그램의 흐름을 바꾸는 명령으로 어떤 상황일 때 코드의 특정부분으로 가서 동작하게끔 할 수 있습니다.

    코드의 흐름을 비직관적으로 만들 수 있고, 디버깅과 유지보수를 어렵게 할 수 있으므로 goto문을 쓰지 않는 걸 권장 받아 왔고 그렇게 교육 받아 왔지만 잘 쓰면 약이고, 잘못 쓰면 독약인 것처럼 goto도 그러하기 때문에 현재 시점에서는 용도에 맞게, 의도에 맞게 잘 쓰면 아무런 문제도 되지 않습니다.

    단, 이게 무슨 용도로, 의도로 쓰였는지 주석은 꼭 달아주도록 합시다!

     

    goto문 작성방법

    1. 레이블(label)을 정의합니다. 레이블은 코드 내의 특정 위치를 식별하는 식별자입니다. 레이블은 콜론(:)으로 끝나는 형식으로 작성됩니다.

    2. goto 키워드 뒤에 이동하려는 레이블 이름을 지정합니다. 이동하려는 레이블 앞에는 :이 필요하지 않습니다.

     

    코드 예시

    예시1)

    static void Main(string[] args)
    {
        while (true)
        {
            int iFirst = 0, iSecond = 0;
     
            First: // 돌아올 지점1
            Console.Write("What is the first number? ");
            string firstNum = Console.ReadLine();
     
            if (!int.TryParse(firstNum, out iFirst))
            {
                goto First; // 첫 번째 입력값을 받으러 [돌아올 지점1]로 이동.
            }
     
            if (iFirst < 0)
            {
                goto First; // 첫 번째 입력값을 받으러 [돌아올 지점1]로 이동.
            }
     
            Second: // 돌아올 지점2
            Console.Write("What is the second number? ");
     
            string secondNum = Console.ReadLine();
     
            if (!int.TryParse(secondNum, out iSecond))
            {
                goto Second; // 두 번째 입력값을 받으러 [돌아올 지점2]로 이동.
            }
     
            if (iSecond < 0)
            {
                goto Second; // 두 번째 입력값을 받으러 [돌아올 지점2]로 이동.
            }
     
            Console.WriteLine("{0} + {1} = {2}", iFirst, iSecond, iFirst + iSecond);
            Console.WriteLine("{0} - {1} = {2}", iFirst, iSecond, iFirst - iSecond);
            Console.WriteLine("{0} * {1} = {2}", iFirst, iSecond, iFirst * iSecond);
            Console.WriteLine("{0} / {1} = {2}", iFirst, iSecond, iFirst / iSecond);
        }
    }

    이 코드는 내 다른 블로그에 적어 놓은 코드를 가져온 것으로, 첫 번째 또는 두 번째에 입력값을 받아서 각각 숫자가 아니거나 음수인 경우 다시 입력값을 받는 곳으로 돌아갑니다.

     

    예시2)

    static void Main(string[] args)
    {
        start:
        Console.WriteLine("Start");
        string input = Console.ReadLine();
    
        if (input == "go")
        {
            goto end; // "go" 입력 시 end 레이블로 이동
        }
        else
        {
            Console.WriteLine("Invalid input. Going back to start.");
            goto start; // 유효하지 않은 입력 시 start 레이블로 이동
        }
    
        end:
        Console.WriteLine("End"); // end 레이블에 도달하면 "End" 출력
    }

    사용자가 "go"를 입력하면 end 레이블로 이동하고, 그렇지 않은 경우에는 start 레이블로 돌아갑니다.

     

    예시3)

    static void Main(string[] args)
    {
        for (int i = 0; i < 5; i++)
        {
            Console.WriteLine("Outer loop: " + i);
            for (int j = 0; j < 3; j++)
            {
                Console.WriteLine("Inner loop: " + j);
                if (j == 1)
                {
                    goto outerLoopBreak; // 내부 루프에서 j가 1이면 외부 루프로 이동
                }
            }
        }
    
        outerLoopBreak:
        Console.WriteLine("Break from outer loop");
    }

    내부 루프가 끝나면 외부 루프도 끝나는 방법으로 goto를 사용 할 수 있습니다.

    반응형

    '닷넷 > C#' 카테고리의 다른 글

    C# 숫자 세자리마다 콤마(쉼표)찍기  (2) 2018.08.02
    C# 폼 캡처, 자식 폼 캡처  (0) 2018.07.18
    C# SqlDependency 사용 중에...  (0) 2018.06.21
    C# 텍스트파일 읽기  (1) 2018.03.14
    C# 바이너리 파일 읽기 (한글 포함)  (0) 2018.01.09

    댓글

Designed by Tistory.