[기초 구문 익히기] 5장 코드의 흐름 제어하기(if, switch, while, for, break, continue)

0

이것이 C#이다

목록 보기
6/26

5.1 분기문

if 문

(생략)

switch 문

switch문에 사용되는 조건식은 정수 형식과 문자열 형식 두 가지만 지원합니다.
부동 소수형을 사용할 수 있지만 권장하지 않습니다. 반올림 오차로 인해 의도한 결과와 다르게 동작할 수 있기 때문입니다.

switch(조건식)
{
	case 상수1:			------ 조건식 == 상수1?
    	//실행할 코드
        break;
    case 상수2:			------ 조건식 == 상수2?
    	//실행할 코드
        break;
    case 상수N:			------ 조건식 == 상수N?
    	//실행할 코드
        break;    
    default:			------조건식이 어떤 경우와도 맞지 않은 경우
    	//실행할 코드
        break;
}

데이터 형식을 조건으로 사용한 예제

	object obj = null;
    string s = Console.ReadLine();

    if(int.TryParse(s,out int out_i))
        obj = out_i;
    else if (float.TryParse(s,out float out_f))
        obj = out_f;
    else
        obj = s;

    switch (obj)
    {
        case int i:
            Console.WriteLine($"{i}는 int 형식 입니다.");
            break;
        case float f when f >= 0:		
        Console.WriteLine($"{f}는 양의 float 형식 입니다.");
        break;
        case float f:
            Console.WriteLine($"{f}는 음의 float 형식 입니다.");
            break;
        default:
            Console.WriteLine($"{obj}는 모르는 형식 입니다.");
            break;
    }

switch문의 when절을 이용하여 추가적인 조건검사를 수행할수있습니다. when 절을 if 문과 비슷하다고 생각하면 이해하기 쉽습니다.

TryParse() vs Parse()
문자열을 숫자로 변환해주는 Parse()메소드와 TryParse()는 어떤차이가 있을까요?
이 둘의 차이는 변환이 실패하는 경우를 어떻게 다루는가에 있습니다. Parse() 메소드는 변환이 실패하면 예외를 던지며 실행을 멈추게 됩니다. 반면, TryParse()는 변환의 성공 여부를 반환하기 때문에 연재의 코드 흐름을 유지할 수 있습니다. TryParse()가 변환한 데이터는 두 번째 매개변수에 저장됩니다.

5.1 반복문

while 문

int i = 10;

while(i > 0)	-----while문을 빠져나갈수있는 조건
{
	Console.WriteLinee($"i : {i--}");
}	

do while 문

do while 문은 조건식을 평가하기 전에 do에 담긴 코드블럭을 무조건 처음 한 번은 코드를 실행한다는 점이 다릅니다.

int i = 10;

do							// 이 코드 블록은 최초 한번은 무조건 실행됩니다.
{
	Console.WriteLine (a);
    a -= 2;
}
while(a > 0);	-----do while문을 빠져나갈수있는 조건

for 문

(생략)

foreach 문

foreach문은 배열(또는 컬렉션)의 끝에 도달하면 자동으로 반복이 종료 됩니다.

int[] arr = new int[]{0,1,2,3};	//배열 선언

foreach (int a in arr)	//(데이터 형식 번수명 in 배열_또는_컬렉션)
{
	Console.Write(a);
}

5.1 점프문

break

현재 실행중인 반복문이나 switch문의 실행을 중단하고자 할 때 사용합니다.

int i = 0;

while (i >= 0)
{
	if(i == 0)
    	break;		
        
    Console.WriteLine(i++);
}

continue

continue문은 한 회 건너 뛰어 반복을 계속 수행하게 하는 기능을 합니다.

for (int i=0; i<5; i++ )
{
	if(i == 3)
		continue;
        
    Console.WriteLine(i);
}

goto

goto 레이블;

레이블 :				//레이블 선언시 콜론(:)사용
	// 이어지는 코드

goto의 레이블은 변수하고는 좀 다른데, 코드 안의 위치를 나타내는 표지판 간은 존재입니다.
goto는 저 레이블이 가르키는 곳으로 바로 뛰어넘어갑니다.
goto는 코드의 흐름을 자주 끊어 코드를 읽기 어렵기 하기 때문에 별로 좋아하지 않지만,
그럼에도 유용한 경우가 있는데 중첩된 반복문을 단번에 뚫고 나오기 위해 사용할때입니다.

Console.Write("종료 조건(숫자)를 입력하세요 : ");
String input = Console.ReadLine();
int input_number = Convert.ToInt32(input);
int exit_number = 0;

for(int i=0; i<2; i++)
{
	for(int j=0; j<2; j++)
    {
    	for(int k=0; k<3; k++)
        {
        	if(exit_number++ == input_number)
            	goto EXIT_FOR;		//조건이 참이면 EXIT_FOR으로 점프 합니다.
            
            Console.WriteLine(exit_number);
        }
    }
}

goto EXIT_PROGRAM;	//정상적으로 중첩 for문을 빠져나온 경우EXIT_FOR을 만나지 않기 위해 점프합니다.

EXIT_FOR:
	Console.WriteLine("\n중첩문 종료...");
    
EXIT_PROGRAM:
	Console.WriteLine("Exit program...");

return문과 throw문은 이후 장에서 소개합니다.

0개의 댓글