-
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