Skip to main content

[This is C#] Chapter 5. 코드의 흐름 제어하기

이것이 C#이다 책을 읽고 공부한 노트입니다.




분기문 #

  • C#이 제공하는 분기문
    • if
    • switch

switch 문 #

  • C# 7.0부터는 switch문에 데이터 형식을 조건으로 사용할 수 있게 되었다.
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("int 형식");
        break;

    case float f:
        Console.WriteLine("float 형식");
        break;

    default:
        Console.WriteLine("모르는 형식");
        break;
}

  • when절을 이용하여 추가적은 조건 검사를 수행할 수 있다.
switch (obj)
{
    case int i:
        Console.WriteLine("int 형식");
        break;

    case float f when f >= 0:
        Console.WriteLine("양의 float 형식");
        break;

    case float f:
        Console.WriteLine("음의 float 형식");
        break;
		
    default:
        Console.WriteLine("모르는 형식");
        break;
}

switch 식 #

  • switch문을 switch식으로 바꾸는 예제
int score = 99;
int result = (int)(Math.Truncate(score/10.0) * 10); // 1의 자리를 버린다. 
string grade = "";

switch (result)
{
    case 90:
        grade = "A";
        break;

    case 80:
        grade = "B";
        break;

    case 70:
        grade = "C";
        break;

    default:
        grade = "F";
        break;
}
int score = 99;
int result = (int)(Math.Truncate(score/10.0) * 10);

string grade = result switch
{
    90 => "A",
    80 => "B",
    70 => "C",
    _ => "F"
};

  • switch식에 when절 활용해보기
bool repeated = true;
int score = 99;
int result = (int)(Math.Truncate(score/10.0) * 10);

string grade = result switch
{
    90 when repeated == true => "A+",
	90 => "A",
    80 => "B",
    70 => "C",
    _ => "F"
};



반복문 #

  • C#이 제공하는 반복문
    • while
    • do while
    • for
    • foreach

foreach #

  • 배열이나 컬렉션을 순회하면서 각 데이터 요소에 차례대로 접근하도록 해준다. 그리고, 끝에 도달하면 자동으로 반복이 종료된다.
int[] arr = new int[]{0, 1, 2, 3, 4};

foreach (int a in arr)
    Console.WriteLine(a);



점프문 #

  • C#이 제공하는 점프문
    • break
    • continue
    • goto
    • return
    • throw

goto #

  • goto 레이블;을 통해서 해당 레이블(Label)로 건너뛸 수 있다.
    • 중첩된 반복문을 단번에 뚫고 나올 수 있다는 장점이 있다.
string input = Console.ReadLine();
int input_number = Convert.ToInt32(input);
int exit_number = 0;

for (int i = 0; i < 100; i++)
{
    for (int j = 0; j < 200; j++)
    {
        for (int k = 0; k < 300; k++)
        {
            if (exit_number++ == input_number)
                goto EXIT_FOR;

            Console.WriteLine(exit_number);
        }
    }
}

EXIT_FOR:
    Console.WriteLine("Exited for");