{TIL} ReadLine 사용방법 및 C# 문법 과제 풀이

Kwaksang·2024년 4월 23일

TIL

목록 보기
6/37
post-thumbnail

질의 응답 및 C# 문법 종합반 2일차

Chapter .1 ReadLine 관련 질의 응답

Q. Console.ReadLine();

을 사용할 때 문자열이 아닌 숫자를 입력하게 되는 경우 어떤 식으로 접근을 해야할까요?

A. x = int.Parse(Console.ReadLine());

처럼 문자열(string)이 아닌 정수(int)로 변환하기 위한 코드를 추가적으로 입력해주면 됩니다.

1. (console.ReadLine()) = 입력값을

2. int.Parse = 정수로 변환해줘

Chapter .2 숫자 맞추기 게임 만들기

문제 : 여기에 코드를 입력해주세요 :)

제출 답안

int target = new Random().Next(1, 101);
int guess = 0;
int count = 0;
Console.WriteLine("1~100 사이의 숫자를 맞춰보세요.");

while (guess != target)
{
    Console.Write("정답을 입력해주세요 : ");
    guess = int.Parse(Console.ReadLine());
    count++;

    if (guess < target)
    {
        Console.WriteLine("정답은 더 높은 숫자입니다.");

    }
    else if (guess > target)
    {
        Console.WriteLine("정답은 더 낮은 숫자입니다.");
    }
    else
    {
        Console.WriteLine("축하합니다. 정답입니다!");
        Console.WriteLine("시도한 횟수 : " + count);
    }
}

출력 결과물

  • while문이 아닌 for문으로 시작했다가 반복이 제대로 되지 않아 수정했는데, 아직은 while문이 더 쉽게 느껴져서 for문을 더 연습해야 할 것 같음

Chapter .3 메서드 관련 질의 응답

Q. 아래 코드에서 return sum을 사용하는 이유와 sum을 그대로 Console 하지 않고 result 값을 새로이 만들어서 쓰는 이유가 궁금합니다.

int AddNumbers(int a, int b)
{
    int sum = a + b;
    return sum;
}
// 메서드 호출 및 반환값 사용
int result = AddNumbers(10, 20);
Console.WriteLine("Sum: " + result);

A-1. Return sum을 사용하는 이유

int AddNumbers 라는 데이터에 int sum = a + b 라는 값을 넣어주기 위해 return을 사용하게 됩니다.

A-2. sum을 Console 하지 않고 result를 새로 만든 이유

int AddNumbers는 별도의 접근제한자를 설정하지 않았기 때문에 기본적으로 Private가 적용된 것으로 인식됩니다.

그래서 sum은 Main Class에서는 확인이 불가능한 변수이므로 이 변수를 이용하기 위한 result를 새로 만들어서 활용하게 됩니다.

  • 기초적인 함수이지만 초보 입장에서는 이해가 되지 않는 부분이었는데, 따로 설명을 듣게 되니 이해가 되었음

Chapter .4 틱택토 게임 만들기

문제 : 여기에 코드를 입력해주세요 :)

제출 답안

internal class Program
{
    static char[] arr = {'1', '2', '3', '4', '5', '6', '7', '8', '9'};
    static int player = 1;
    static int choice;
    static int flag = 0;

    static void Main(string[] args)
    {
        do
        {
            Console.Clear();
            Console.WriteLine("1번 플레이어돌 : X / 2번 플레이어돌 : O");
            Console.WriteLine("\n");

            if (player % 2 == 1)
            {
                Console.WriteLine("1번 플레이어돌 놓을 차례");
            }
            else
            {
                Console.WriteLine("2번 플레이어돌 놓을 차례");
            }
            Console.WriteLine("\n");
            Board();

            string line = Console.ReadLine();
            bool res = int.TryParse(line, out choice);

            if (res == true)
            {
                if (arr[choice-1] != 'X' && arr[choice-1] != 'O')
                {
                    if (player % 2 == 1)
                    {
                        arr[choice-1] = 'X';
                    }
                    else
                    {
                        arr[choice-1] = 'O';
                    }

                    player++;
                }
                else
                {
                    Console.WriteLine("이미 {0} 행은 {1} 돌이 놓아져 있습니다. 다른 곳을 선택해주세요.", choice, arr[choice-1]);
                    Console.ReadLine();
                }
            }
            else
            {
                Console.WriteLine("1~9 사이의 숫자를 입려해주세요.");
            }

            flag = CheckWin();
        }
        while (flag != -1 && flag != 1);

        if (flag == 1)
        {
            Console.WriteLine("플레이어 {0}이(가) 이겼습니다.", (player % 2) + 1);
        }
        else
        {
            Console.WriteLine("무승부");
        }
        Console.ReadLine();
    }
    static void Board()
    {
        Console.WriteLine("_________________");
        Console.WriteLine("     |     |     ");
        Console.WriteLine("  {0}  |  {1}  |  {2}  ", arr[0], arr[1], arr[2]);
        Console.WriteLine("_____|_____|_____");
        Console.WriteLine("     |     |     ");
        Console.WriteLine("  {0}  |  {1}  |  {2}  ", arr[3], arr[4], arr[5]);
        Console.WriteLine("_____|_____|_____");
        Console.WriteLine("     |     |     ");
        Console.WriteLine("  {0}  |  {1}  |  {2}  ", arr[6], arr[7], arr[8]);
        Console.WriteLine("     |     |     ");
        Console.WriteLine(" ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄");
    }
    static int CheckWin()
    {
        if (arr[0] == arr[1] && arr[1] == arr[2])
        {
            return 1;
        }
        else if (arr[3] == arr[4] && arr[4] == arr[5])
        {
            return 1;
        }
        else if (arr[6] == arr[7] && arr[7] == arr[8])
        {
            return 1;
        }

         else if (arr[0] == arr[3] && arr[3] == arr[6])
        {
            return 1;
        }
        else if (arr[1] == arr[4] && arr[4] == arr[7])
        {
            return 1;
        }
        else if (arr[2] == arr[5] && arr[5] == arr[8])
        {
            return 1;
        }

        else if (arr[0] == arr[4] && arr[4] == arr[8])
        {
            return 1;
        }
        else if (arr[2] == arr[4] && arr[4] == arr[6])
        {
            return 1;
        }

        else if (arr[0] != '1' && arr[1] != '2' && arr[2] != '3' && arr[3] != '4' && arr[4] != '5' && arr[5] != '6' &&
            arr[6] != '7' && arr[7] != '8' && arr[8] != '9')
        {
            return -1;
        }
        else { return 0; }

    }
}

결과 출력물

  • 몰랐던 점
  1. internal
  2. static
  3. TryParse
  • 알아보기 위해 시도한 부분
  1. 구글 검색
  2. 강의 재수강
  3. 동기에게 질의응답
  • 해결된 점
  1. internal : 접근제한자의 종류이며, 제한하는 종류는 아래 이미지와 같다.
  2. static : 프로그램을 시작할 때부터 끝날 때까지 살아있을 수 있는 정적 한정자로, 메모리 용량을 차지하는 부분이 많아 과하게 사용하지 않는 것을 추천한다고 한다.
  3. TryParse : 변환값을 바로 변환하지 않고 bool의 값이 true 일 땐 변환이 되고, false 일 땐 변환이 되지 않는다. 무엇인가를 예외 처리할 때 사용된다.
profile
게임은 재미와 기능!

0개의 댓글