본문 바로가기
개발/Unity 내일배움캠프 TIL

[내일배움단] 사전캠프 C# TIL 4. 제어문

by 석시 2023. 7. 20.



조건문

크게 두 가지가 있다. ifswitch.

if 조건문

if ( 조건 ) { 실행 내용 }

간단하다. 조건이 true면 중괄호 {} 안의 내용을 실행, 아니라면 패스.

주의해야할 점은 조건에 들어가는 내용이 반드시 bool 형식이어야 한다는 것.

좀 더 엄밀히 말하면 bool 형식으로 암시적 캐스팅이 가능한 것들도 넣을 수 있다.

다른 언어들은 0(false) 0이 아닌 것들(true)조건으로 가능하지만, C#의 경우 그렇지 않으니 주의할 것.

if (3 > 1)  // true
{
    // 조건을 만족했기에 실행
    Console.WriteLine("3은 1보다 크다!");
}

if (0 > 1)  // false
{
    // 조건을 만족하지 못해서 실행되지 않음
    Console.WriteLine("0은 1보다 크다!");
}

else if와 else

if ( 조건 ) { 실행 내용1 } else if (추가 조건) { 실행 내용2 } else if (추가 조건) { 실행 내용3 } else { 실행 내용4 }

if → else if → 다음 else if → … 순으로 조건 비교를 하게 된다.

모든 조건에 만족되지 않는다면 else실행 내용4를 실행.

여러 개의 추가 조건을 만족하면 어떻게 되나? 라고 생각할 수 있겠지만, 무조건 앞부터다.

앞에서부터 시작해서 제일 먼저 걸리는 조건의 실행 내용을 수행하게 된다.

int score = 60;

if (score > 90)
{
    Console.WriteLine($"점수는 {score}입니다. \'A\'를 맞았습니다.");
}
else if (score > 70)
{
    Console.WriteLine($"점수는 {score}입니다. \'B\'를 맞았습니다.");
}
else if (score > 50)
{
    // 실행
    Console.WriteLine($"점수는 {score}입니다. \'C\'를 맞았습니다.");
}
else
{
    Console.WriteLine($"점수는 {score}입니다. \'F\'를 맞았습니다.");
}

switch와 case

switch ( 조건 변수 ) { case 상수조건1 : 실행내용 break; case 상수조건2 : 실행내용 break; case 상수조건3 : 실행내용 break; }

switch는 조건으로 bool 타입 자료만 받는 것이 아니라 정수와 문자열도 가능하다.

조건이 단순하고 분기가 많은 경우에는 if보다 switch를 쓰는 것이 더 보기 좋아보인다.

아무래도 if보다는 익숙하지 않기 때문에 주의할 점이 조금 있다.

  • :; 사용에 주의할 것
  • case에 들어가는 조건은 반드시 상수일 것
  • break; 를 반드시 쓸 것

break는 뒤에 나올 반복문에서도 종종 쓰일테지만, Jump문의 일종이다.

왜 이름이 jump인지에 대해서는 어셈블리어의 관점인데, 나중에 정리할 일이 있으면 좋겠다.

아무튼 break는 현재 실행 중인 반복문이나 switch문중괄호 {}를 벗어나게 해주는 기능이다.

if문을 다시 들여다보면 조건마다 실행 내용에 중괄호 {}가 쳐져 있지만, switch문의 경우는 모든 case가 한 중괄호 {} 안에 있게 된다.

따라서 한 조건을 실행한 뒤에 다른 case를 더 방문하지 않고 switch문을 벗어나기 위해 작성해주는 것.

int x = 5;

switch (x)
{
    case 1:
        Console.WriteLine("치킨을 주문하자.");
        break;

    case 2:
        Console.WriteLine("피자를 주문하자.");
        break;

    case 3:
        Console.WriteLine("마라탕을 주문하자.");
        break;

    default:
        Console.WriteLine("그냥 먹지 말자.");
        break;
}

참고) 상수와 열거형

switch와 case를 사용할 때, case에 0, 1, 2, …을 활용하는 것이 불편할 수 있다.

1번이 치킨인지… 2번이 치킨인지….

해당 case가 어떤 상황을 가리키는지 잘 모를 수가 있다.

가장 기본적인 것은 다음과 같은 변수 선언이 있겠다.

int CHICKEN = 1;
int PIZZA = 2;
int MARA = 3;

하지만 다음의 변수들은 switch의 case 문에 사용할 수 없다.

상수가 아니라 변수이기 때문이다.

case에 들어가는 값이 변하면 안되기 때문에, 이해는 간다.

하지만 상수에도 이름을 붙일 수도 있지 않나?

당연히 방법이 있다.

  1. 상수형 사용 (const)
const int CHICKEN = 1;
const int PIZZA = 2;
const int MARA = 3;

변수 앞에 const를 붙이면 데이터가 변수가 아니라 상수가 된다.

즉 더 이상 값을 수정할 수 없는 상태가 되는 것이다.

데이터에 접근해서 다른 값을 넣으려 하면 에러를 뱉는다.

이렇게 되면 switch의 case문에 해당 값들을 넣을 수 있게 된다.

int x = 5;

switch (x)
{
    case CHICKEN:
        Console.WriteLine("치킨을 주문하자.");
        break;

    case PIZZA:
        Console.WriteLine("피자를 주문하자.");
        break;

    case MARA:
        Console.WriteLine("마라탕을 주문하자.");
        break;

    default:
        Console.WriteLine("그냥 먹지 말자.");
        break;
}

  1. 열거형 (enum)
enum Menu
{
		CHICKEN = 1,
		PIZZA = 2,
		MARA = 3
}

int x = 5;

switch (x)
{
    case (int)Menu.CHICKEN:
        Console.WriteLine("치킨을 주문하자.");
        break;

    case (int)Menu.PIZZA:
        Console.WriteLine("피자를 주문하자.");
        break;

    case (int)Menu.MARA:
        Console.WriteLine("마라탕을 주문하자.");
        break;

    default:
        Console.WriteLine("그냥 먹지 말자.");
        break;
}

다음과 같이 enum을 사용하여 상수들을 묶어서 관리할 수 있다.

자료형이 enum이기 때문에 형변환을 한 번 거쳐줘야 되긴 하지만, 상수를 추가하거나 제거하는 등의 관리가 훨씬 용이해진다.

조건부 논리 연산자의 활용

if를 사용할 때, 논리 연산을 활용에 복잡한 조건에 대해서도 대응할 수 있다.

// 둘 다 기다리는 경우
{
		bool isArrive_A = true;   // 친구 A 는 도착했다!
		bool isArrive_B = false;  // 친구 B 는 도착하지 않았다!
		
		// And 연산자 && 사용
		if (isArrive_A && isArrive_B)
		{
		    Console.WriteLine("식당으로 이동");
		}
		else
		{
		    Console.WriteLine("친구를 기다리자");
		}
}

// 둘 중 한 명만 기다리는 경우
{
		bool isArrive_A = true;   // 친구 A 는 도착했다!
    bool isArrive_B = true;   // 친구 B 도 도착했다!

    // Or 연산자 || 사용
    if (isArrive_A || isArrive_B)
    {
        Console.WriteLine("식당으로 이동");
    }
    
    else
    {
        Console.WriteLine("친구를 기다리자");
    }
}

삼항연산자

삼항연산자라는 것이 있다.

처음 배울 때는 잘 안써먹게 되지만, 인터넷에서 여러 가지 코드를 읽다보면 삼항 연산자로 써있는 코드를 많이 볼 수 있기 때문에 익숙해지는 것이 좋다.

삼항연산자 조건 ? 맞을때 : 틀릴때

int num = 25;

bool isPair = ((num % 2) == 0 ? true : false);

연습문제3

  1. 입력받은 데이터가 숫자인지 문자열인지 판단.

캐스팅의 TryParse를 응용하여 만들 수 있습니다. - 입력받은 데이터가 숫자 → “숫자입니다.” - 아니라면 → “문자열입니다.

  • 정답
    // 3-1. 입력받은 데이터가 숫자인지 문자열인지 판단
    {
        string input = Console.ReadLine();
        int data;
    
        bool isInt = int.TryParse(input, out data);
    
        if (isInt)
        {
            Console.WriteLine("숫자입니다.");
        }
        else
        {
            Console.WriteLine("문자열입니다.");
        }
    }

참고할 것 Console.ReadLine()Console.WriteLine() 과 반대로 출력이 아닌 입력을 받는 함수. 내가 입력한 것을 변수에 저장해주지만, 무엇을 입력하든 항상 string으로 저장하기 때문에 주의하자.

  1. 입력받는 데이터가 숫자인지 문자열인지 불리언인지 판단.

- 숫자면 “숫자입니다.” - true, false 면 “불리언입니다.” - 아니라면 “문자열입니다.

  • 정답
    // 3-2. 입력받은 데이터가 숫자인지 문자열인지 불리언인지 판단
    {
        string input = Console.ReadLine();
        
        int iData;
        bool bData;
    
        bool isInt = int.TryParse(input, out iData);
        bool isBool = bool.TryParse(input, out bData);
    
        if (isInt)
        {
            Console.WriteLine("숫자입니다.");
        }
        else if (isBool)
        {
            Console.WriteLine("불리언입니다.");
        }
        else
        {
            Console.WriteLine("문자열입니다.");
        }
    }

  1. 입력받은 데이터가 숫자라면 100보다 큰지 작은지 알려주는 프로그램 만들기

입력받은 데이터가 문자라면 - “숫자가 아닙니다.” 입력받은 데이터가 숫자라면 - 수가 100 이상이라면 “xx 은(는) 100 보다 같거나 큰 수 입니다.” - 수가 100 보다 작다면 “xx 은(는) 100 보다 작은 수 입니다.

  • 정답
    // 3-3. 입력받은 데이터가 숫자라면 100 보다 큰지 작은지 알려주는 프로그램 만들기
    {
        string input = Console.ReadLine();
        
        int iData;
    
        bool isInt = int.TryParse(input, out iData);
    
        if (isInt)
        {
            if (iData >= 100)
            {
                Console.WriteLine($"{iData}는 100 보다 같거나 큰 수 입니다.");
            }
            else // iData < 100
            {
                Console.WriteLine($"{iData}는 100 보다 작은 수 입니다.");
            }
        }
        else
        {
            Console.WriteLine("숫자가 아닙니다.");
        }
    }

  1. 입력받은 데이터가 숫자라면 100보다 큰지 작은지 알려주는 프로그램 만들기

입력받은 데이터가 문자라면 - “숫자가 아닙니다.” 입력받은 데이터가 숫자라면 - 수가 짝수라면 “xx 은(는) 짝수 입니다.” - 수가 홀수라면 “xx 은(는) 홀수 입니다.

  • 정답
    // 3-4. 입력받은 데이터가 숫자라면 짝수인지 홀수인지 알려주는 프로그램 만들기
    {
        string input = Console.ReadLine();
        
        int iData;
    
        bool isInt = int.TryParse(input, out iData);
    
        if (isInt)
        {
            if (iData % 2 == 0)
            {
                Console.WriteLine($"{iData}는 짝수입니다.");
            }
            else // iData < 100
            {
                Console.WriteLine($"{iData}는 홀수입니다.");
            }
        }
        else
        {
            Console.WriteLine("숫자가 아닙니다.");
        }
    }

연습문제4

  1. 숫자를 두번 입력받아서 두번 다 숫자인지 확인

- 프로그램을 처음 시작하면 “첫번째 수를 입력해 주세요.” 메시지 출력 - 메시지를 입력하고 Enter - “두번째 수를 입력해 주세요.” 메시지 출력 - 메시지를 입력하고 Enter → 첫번째 수와 두번째 수 모두 숫자 라면 - “두 데이터는 모두 숫자입니다.” → 모두 숫자가 아니라면 - “숫자가 아닙니다.

  • 정답
    // 4-1. 숫자를 두번 입력받아서 두번 다 숫자인지 확인
    {
        Console.WriteLine("첫번째 수를 입력해 주세요.");
        string input1 = Console.ReadLine();
        Console.WriteLine("두번째 수를 입력해 주세요.");
        string input2 = Console.ReadLine();
        
        int iData1;
        int iData2;
    
        bool isInt1 = int.TryParse(input1, out iData1);
        bool isInt2 = int.TryParse(input2, out iData2);
    
        if (isInt1 && isInt2)
        {
            Console.WriteLine("두 데이터는 모두 숫자입니다.");
        }
        else
        {
            Console.WriteLine("숫자가 아닙니다.");
        }
    }

  1. 숫자를 두번 입력받아서 두번 다 숫자인지 하나만 숫자인지 확인

- 프로그램을 처음 시작하면 “첫번째 수를 입력해 주세요.” 메시지 출력 - 메시지를 입력하고 Enter - “두번째 수를 입력해 주세요.” 메시지 출력 - 메시지를 입력하고 Enter → 첫번째 수와 두번째 수 모두 숫자 라면 - “두 데이터는 모두 숫자입니다.” → 둘 중 하나만 숫자라면 - “하나의 데이터만 숫자입니다.” → 숫자가 하나도 없다면 - “두 데이터 모두 숫자가 아닙니다.

  • 정답
    // 4-2. 숫자를 두번 입력받아서 두번 다 숫자인지 하나만 숫자인지 확인
    {
        Console.WriteLine("첫번째 수를 입력해 주세요.");
        string input1 = Console.ReadLine();
        Console.WriteLine("두번째 수를 입력해 주세요.");
        string input2 = Console.ReadLine();
        
        int iData1;
        int iData2;
    
        bool isInt1 = int.TryParse(input1, out iData1);
        bool isInt2 = int.TryParse(input2, out iData2);
    
        if (isInt1 && isInt2)
        {
            Console.WriteLine("두 데이터는 모두 숫자입니다.");
        }
        else if (isInt1 || isInt2)
        {
            Console.WriteLine("하나의 데이터만 숫자입니다.");
        }
        else
        {
            Console.WriteLine("숫자가 아닙니다.");
        }
    }

  1. 숫자를 두번 입력받아서 두 수를 비교

- 프로그램을 처음 시작하면 “첫번째 수를 입력해 주세요.” 메시지 출력 - 메시지를 입력하고 Enter - “두번째 수를 입력해 주세요.” 메시지 출력 - 메시지를 입력하고 Enter - 둘 중 하나라도 숫자가 아니라면 - “두 개의 숫자를 입력해주세요.” - 첫번째 수와 두번째 수 모두 숫자 라면 - 첫번째 수와 두번째 수가 같다면 - ”xx 와(과) xx 은(는) 같습니다.” - 첫번째 수와 두번째 수가 다르다면 - 첫번째 수가 더 크다 - “xx 은(는) xx 보다 큽니다.” - 첫번째 수가 작다 - “xx 은(는) xx 보다 작습니다.

  • 정답
    // 4-3. 숫자를 두번 입력받아서 두 수를 비교
    {
        Console.WriteLine("첫번째 수를 입력해 주세요.");
        string input1 = Console.ReadLine();
        Console.WriteLine("두번째 수를 입력해 주세요.");
        string input2 = Console.ReadLine();
        
        int iData1;
        int iData2;
    
        bool isInt1 = int.TryParse(input1, out iData1);
        bool isInt2 = int.TryParse(input2, out iData2);
    
        if (isInt1 && isInt2)
        {
            if (iData1 > iData2)
                Console.WriteLine($"{iData1} 은(는) {iData2} 보다 큽니다.");
            else if (iData1 < iData2)
                Console.WriteLine($"{iData1} 은(는) {iData2} 보다 작습니다.");
            else // iData1 == iData2
                Console.WriteLine($"{iData1} 와(과) {iData2} 은(는) 같습니다.");
        }
        else
        {
            Console.WriteLine("두 개의 숫자를 입력해 주세요.");
        }
    }

연습문제5

  1. 퀴즈를 내서 정답을 맞추는 프로그램 작성

Q. 대한민국의 수도는 어디인가요? 1.인천 2.평창 3.서울 4.부산

- 입력한 데이터가 숫자가 아니라면 - “숫자가 아닙니다.” - 1 ~ 4 가 아니라면 - “1~4 의 숫자를 입력해주세요.” - 1 ~ 4 의 숫자일때 → 정답이 아니라면 - “오답입니다!” → 정답이라면 - “정답입니다!”

  • 정답
    // 5-1. 퀴즈를 내서 정답을 맞추는 프로그램 작성
    {
        Console.WriteLine("Q. 대한민국의 수도는 어디인가요?");
        Console.WriteLine("1.인천  2.평창  3.서울  4.부산");
    
        string input = Console.ReadLine();
    
        int iData;
    
        bool isInt = int.TryParse(input, out iData);
    
        if (isInt)
        {
            if (iData < 1 || iData > 4)
                Console.WriteLine("1~4의 숫자를 입력해주세요.");
            else // 1 <= iData <= 4
            {
                if (iData == 3)
                    Console.WriteLine("정답입니다!");
                else
                    Console.WriteLine("오답입니다!");
            }
        }
        else
            Console.WriteLine("숫자가 아닙니다.");
    }

  1. 주어진 보기를 선택하면 해당하는 선택지에 맞는 메시지 출력

어디로 여행을 가고 싶나요? 1.제주도 2.코타키나발루 3.싱가포르 4.태국

- 입력한 데이터가 숫자가 아니라면 - “숫자가 아닙니다.” - 1 ~ 4 가 아니라면 - “1~4 의 숫자를 입력해주세요.” - 1 ~ 4 의 숫자라면 → 제주도 “제주도는 한국의 섬으로 비교적 방문이 쉽고 다양한 놀거리/먹거리가 준비되어 있습니다.” → 코타키나발루 “코타키나발루는 말레이시아 사바주의 주도로, 말레이시아 동부 보르네오섬 최대의 도시입니다.” → 싱가포르 ”싱가포르는 동남아시아, 말레이 반도의 끝에 위치한 섬나라이자 항구 도시로 이루어진 도시 국가입니다.” → 태국 ”태국은 중국문화, 말레이문화, 불교문화, 힌두문화, 이슬람 문화가 혼재되어 있습니다. 불교적인 모습을 많이 띄지만, 문화 자체는 색다르고 스펙트럼이 넓은 형태를 띄고 있어요.

  • 정답
    // 5-2. 주어진 보기를 선택하면 해당하는 선택지에 맞는 메시지 출력
    {
        Console.WriteLine("어디로 여행을 가고 싶나요?");
        Console.WriteLine("1.제주도   2.코타키나발루   3.싱가포르   4.태국");
    
        string input = Console.ReadLine();
    
        int iData;
    
        bool isInt = int.TryParse(input, out iData);
    
        if (isInt)
        {
            switch (iData)
            {
                case 1:
                    Console.WriteLine("제주도는 한국의 섬으로 비교적 방문이 쉽고 다양한 놀거리/먹거리가 준비되어 있습니다.");
                    break;
                case 2:
                    Console.WriteLine("코타키나발루는 말레이시아 사바주의 주도로, 말레이시아 동부 보르네오섬 최대의 도시입니다.");
                    break;
                case 3:
                    Console.WriteLine("싱가포르는 동남아시아, 말레이 반도의 끝에 위치한 섬나라이자 항구 도시로 이루어진 도시 국가입니다.");
                    break;
                case 4:
                    Console.WriteLine("태국은 중국문화, 말레이문화, 불교문화, 힌두문화, 이슬람 문화가 혼재되어 있습니다. 불교적인 모습을 많이 띄지만, 문화 자체는 색다르고 스펙트럼이 넓은 형태를 띄고 있어요.");
                    break;
                default:
                    Console.WriteLine("1~4 의 숫자를 입력해주세요.");
                    break;
            }
        }
        else
            Console.WriteLine("숫자가 아닙니다.");
    }

반복

forwhile, do while이 있다. 전부 무지막지하게 자주 쓴다.

for

for ( 초기화 ; 조건 ; 변화 ) { 실행 내용 }

보통은 기본 형태인 for (int i = 1; i <= 10; ++i) 로 기억할테지만, 객체가 섞이기 시작하면 변형이 굉장히 많이 일어나니 원래 모습에 충실하자.

다음은 1부터 10까지 출력하는 함수다.

for (int i = 1; i <= 10; ++i)
{
    Console.WriteLine(i); // 조건을 만족하는한 계속 반복됩니다.
}

while

초기화 while ( 조건 ) { 변화 실행 내용 }

초기화변화를 직접 해줘야 함에 주의.

역시 for랑 동일한 동작을 수행하게 할 수 있다.

int i = 1;      // 1부터 세기 시작

while (i <= 10)  // 10까지 셀것
{
    Console.WriteLine(i);
    i++;        // +1 씩 증가
}

뭔가 for가 더 명시적이고 편하겠지만, while이 더 편한 경우가 생각보다 자주 있다.

강의안에는 외부의 조건에 의해 영향 받을때 사용한다고 되어 있는데, 쉽게 말하면 해당 반복문 중괄호 {} 안에서 조건을 컨트롤 하기 힘든 경우에 사용하면 좋다는 것D이다.

do while

초기화 do { 변화 실행 내용 } while ( 조건 );

while이랑 거의 똑같지만, 조건체크가 먼저냐 중괄호 {} 실행이 먼저냐의 차이.

전위 연산과 후위 연산의 차이랑 비슷하다 해야하나?

쓸 데 없어보이지만, 조건체크 전에 중괄호 {}를 실행해야하는 상황이 반드시 필요할 때가 있다.

뭔가 while로 아무리 짱구굴려도 설계가 안되는 상황에 떠올린다면 좋은.

연습문제6

  1. 구구단 2단을 만들기

반복 문을 활용하여 구구단 2단을 만듭니다.

  • 정답
    // 6-1. 구구단 2단을 만들기
    {
        for (int i = 2; i < 10; ++i)
            Console.WriteLine($"2 x {i} = {i * 2}");
    }

  1. 입력받은 데이터로 구구단 만들기

숫자를 하나 입력받아서 2~9 까지 곱한 결과를 나타냅니다. → 입력받은 데이터가 숫자가 아니라면 - “숫자가 아닙니다.

  • 정답
    // 6-2. 입력받은 데이터로 구구단 만들기
    {
        Console.WriteLine("출력하고 싶은 단을 입력해주세요.");
    
        string input = Console.ReadLine();
    
        int num;
    
        bool isInt = int.TryParse(input, out num);
    
        if (isInt == false)
            Console.WriteLine("숫자가 아닙니다.");
        else // isInt == true
            for (int i = 2; i < 10; ++i)
                Console.WriteLine($"{num} x {i} = {num * i}");
    }

  1. 피보나치 수열 구하기

피보나치 수열 10개까지 출력하기

  • 정답
    // 6-3. 피보나치 수열 구하기
    {
        int num1 = 1;
        int num2 = 1;
    
        Console.Write(num1 + " ");
        Console.Write(num2 + " ");
    
        for (int i = 2; i < 10; ++i)
        {
            if (i % 2 == 0)
            {
                num1 += num2;
                Console.Write(num1 + " ");
            }
            else // i % 2 != 0
            {
                num2 += num1;
                Console.Write(num2 + " ");
            }
        }
    }

Console.Write(); 줄을 바꾸지 않고 메세지를 표시

  1. 입력받은 수만큼 피보나치 수열 구하기

숫자를 입력하면 입력한 숫자만큼 피보나치 수열 출력하기

  • 최초 메시지 출력 - “몇개의 피보나치 수열을 출력하고 싶으신가요?
  • 입력받은 데이터가 숫자가 아니라면 - “숫자가 아닙니다.
  • 숫자가 0 이하라면 - “양수를 입력해주세요.
  • 숫자가 47 이상이라면? - “숫자가 너무 큽니다.
  • 정답
    // 6-4. 입력받은 수만큼 피보나치 수열 구하기
    {
        Console.WriteLine("몇개의 피보나치 수열을 출력하고 싶으신가요?");
        string input = Console.ReadLine();
        int num;
    
        bool isInt = int.TryParse(input, out num);
    
        if (isInt == false)
            Console.WriteLine("숫자가 아닙니다");
        else // isInt == true
        {
            if (num >= 47)
                Console.WriteLine("숫자가 너무 큽니다.");
            else if (num <= 0)
                Console.WriteLine("양수를 입력해주세요.");
            else
            {
                int num1 = 1;
                int num2 = 1;
    
                Console.Write(num1 + " ");
                Console.Write(num2 + " ");
    
                for (int i = 2; i < num; ++i)
                {
                    if (i % 2 == 0)
                    {
                        num1 += num2;
                        Console.Write(num1 + " ");
                    }
                    else // i % 2 != 0
                    {
                        num2 += num1;
                        Console.Write(num2 + " ");
                    }
                }
            }
        }
    }

연습문제7

  1. 이름 입력하기

이름을 입력하여 3글자 이상 10글자 이하의 이름을 입력할 수 있는 프로그램을 작성합니다.

  • 최초 메시지 출력 - “이름을 입력해주세요. (3~10글자)
  • 이름이 3글자 미만, 10글자 초과라면 - “이름을 확인해주세요.
  • 올바르게 입력했다면 - “안녕하세요! 제 이름은 xxx 입니다.
  • 문자열의 .Length 기능을 이용하면 현재 문자열이 몇글자인지 알 수 있습니다.
  • 정답
    // 7-1. 이름 입력하기
    {
        Console.WriteLine("이름을 입력해주세요. (3~10글자)");
        string input = Console.ReadLine();
    
        if (input.Length < 3 || input.Length > 10)
            Console.WriteLine("이름을 확인해주세요.");
        else
            Console.WriteLine($"안녕하세요. 제 이름은 {input} 입니다.");
    }

  1. 조건에 맞을때 까지 이름 입력

1번의 프로그램을 작성하면 3~10글자의 이름을 입력하지 않았을 때 이름을 확인해주세요. 메시지 이후 프로그램이 종료됩니다. 이름을 올바르게 입력할 때까지 실행되도록 적용해보세요 반복문과 bool을 이용하여 만들 수 있습니다.

  • 정답
    // 7-2. 조건에 맞을때 까지 이름 입력
    {
        bool isValid = false;
    
        while (isValid == false)
        {
            Console.WriteLine("이름을 입력해주세요. (3~10글자)");
            string input = Console.ReadLine();
    				
            if (input.Length < 3 || input.Length > 10)
                Console.WriteLine("이름을 확인해주세요.");
            else
            {
                Console.WriteLine($"안녕하세요. 제 이름은 {input} 입니다.");
                isValid = true;
            }
        }
    }

  1. 반복시 기존 내용 지우기

2번의 프로그램을 작성하면 매번 새로운 텍스트가 생기게 됩니다. Console.Clear(); 기능을 활용하면 기존에 Console에 표시되던 메시지를 지울 수 있습니다.

  • 정답
    // 7-3. 반복시 기존 내용 지우기
    {
        bool isValid = false;
    
        while (isValid == false)
        {
            Console.WriteLine("이름을 입력해주세요. (3~10글자)");
            string input = Console.ReadLine();
    
            Console.Clear();
    
            if (input.Length < 3 || input.Length > 10)
                Console.WriteLine("이름을 확인해주세요.");
            else
            {
                Console.WriteLine($"안녕하세요. 제 이름은 {input} 입니다.");
                isValid = true;
            }
        }
    }

break와 continue

break;가장 안쪽 반복문을 끝낼 때 사용하고

continue;는 가장 안쪽 반복문에서 다음 iteration으로 넘어가는 역할을 한다.

for (int i = 0; i < 5; i++)
{
    if (i == 3)
    {
        break;
    }
    Console.WriteLine(i + "번째 반복입니다.");
}
// "0 번째 반복입니다."
// "1 번째 반복입니다."
// "2 번째 반복입니다."

for(int i = 0 ; i < 5 ; i++)
{
		if(i == 3)
		{
				continue;
		}
		Debug.Log(i + "번째 반복입니다.");
}
// "0 번째 반복입니다."
// "1 번째 반복입니다."
// "2 번째 반복입니다."
// "4 번째 반복입니다."

둘 다 jump문이라고 한다.

어셈블리어 관점에서 코드 사이를 뛰어 넘어다니기 때문에 jump문이라고 이름이 붙여져 있다.

자세한 것은 다음 링크를 참고.

점프 문 - break, continue, return 및 goto
C# jump 문(중단, 계속, 반환 및 goto)은 현재 위치에서 다른 문으로 제어를 무조건 전송합니다.
https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/statements/jump-statements


Uploaded by N2T