[C# 개념] 5.1 분기문
- 분기문 : 프로그램의 흐름을 조건에 따라 여러 갈래로 나누는 흐름 제어 구문
- C# 에서는 if 문과 switch 문 제공
5.1.1 if,else,else if
using System;
namespace IfElse
{
class MainApp
{
static void Main(string[] args)
{
Console.WriteLine("숫자를 입력하세요 : ");
string input = Console.ReadLine(); // console.readline()은 사용자로 부터 문자열을 입력 받아 그결과를 반환하는 기능을 합니다.
int number = Int32.Parse(input);
if (number < 0)
Console.WriteLine("음수");
else if (number > 0)
Console.WriteLine("양수");
else
Console.WriteLine("0");
if (number % 2 == 0)
Console.WriteLine("짝수");
else
Console.WriteLine("홀수");
}
}
}
5.1.2 if 문 중첩해서 사용하기
using System;
namespace IfIf
{
class MainApp
{
static void Main(string[] args)
{
Console.WriteLine("숫자를 입력하세요. :");
string input = Console.ReadLine();
int number = Convert.ToInt32(input);
if(number>0 ) {
if(number %2 == 0 )
{
Console.WriteLine("0보다 큰 짝수.");
}
else
{
Console.WriteLine("0보다 큰 홀수");
}
}
else
{
Console.WriteLine("0 보다 작거나 같은수");
}
}
}
}
5.1.3 switch 문
- case 절이나 default 절 에 사용된 break 문은 각 swithc 절에서 실행 중이던 흐름을 switch 문 바깥으로 옮깁니다.
- 필요에 따라 break 문 대신 goto 나 return, throw 와 같은 점프문을 사용하는 것이 문법적으로 허용된다.
using System;
namespace Switch
{
class MainApp
{
static void Main(string[] args)
{
Console.Write("요일을 입력하세요. (일,월,화,수,목,금,토) :");
string day = Console.ReadLine();
switch (day) {
case "일":
Console.WriteLine("Sunday");
break;
case "월":
Console.WriteLine("Monday");
break;
case "화":
Console.WriteLine("Tuesday");
break;
case "수":
Console.WriteLine("Wednesday");
break;
case "목":
Console.WriteLine("Thursday");
break;
case "금":
Console.WriteLine("Friday");
break;
case "토":
Console.WriteLine("Saturday");
break;
default:
Console.WriteLine($"{day}는(은) 요일이 아닙니다.");
break;
}
}
}
}
1) switch 문과 패턴 매칭
- switch 레이블의 패턴에는 상수와 형식을 비롯해서 관계, 논리 등등 C# 이 지원하는 다양한 패턴을 적용할수 있다.
- 패턴의 종류는 다양하지만 switch 문, switch 식 등에 적용하는 방법은 같기 때문에 형식 패턴만 간단하기 넘어가겠습니다.
using System;
namespace Switch2
{
class MainAPP
{
static void Main(string[] args)
{
object obj = null;
string s = Console.ReadLine();
if (int.TryParse(s, out int out_i)) // TryParse() 메소드
obj = out_i;
else if (float.TryParse(s, out float out_f))
obj = out_f;
else
obj = s;
switch (obj)
{
case int:
Console.WriteLine($"{(int)obj}는 int 형식 입니다.");
break;
case float:
Console.WriteLine($"{(float)obj}는 float 형식 입니다.");
break;
default:
Console.Write($"{obj}는 모르는 형식 입니다.");
break;
}
}
}
}
2) 케이스 가드
- 케이스 가드 : switch 문의 case 절의 패턴을 더 구체적으로 만들어주는 추가적인 조건 검사
- case 절에 뒤에 when 절을 붙여 사용한다, when 절은 if 문 처럼 true/false로 결과가 나오는 식을 입력 받는다.
5.1.4 switch 식
- 식(expression) : 결과값을 만들어 낼 수 있는 연산자와 연산자의 조합, 식은 계산해서 결과를 내놓는다.
- 문(statement) : 주어진 일을 한다. 결과를 내든 그렇지 않든.
- 어떤 작업에 분기가 필요할 때는 switch문을 사용하되, 분기를 거쳐 값을 내야하는 경우에는 switch 식을 사용! 게다가 break 같은 점프문도 필요 없다!
- switch 문
- switch 식
- switch 식에 케이스 가드 를 이용한 추가적인 분기 처리
using System;
namespace SwitchExp
{
class MainApp
{
static void Main(string[] args)
{
Console.WriteLine("점수를 입력하세요.");
int score = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("재수강 인가요?(y/n)");
string line = Console.ReadLine();
bool repeated = line == "y"?true:false;
string grade = (int)(Math.Truncate(score / 10.0) * 10) switch
{
90 when repeated == true => "B+",
90 => "A",
80 => "B",
70 => "C",
60 => "D",
_ => "F"
};
Console.WriteLine($"학점 : {grade}");
}
}
}