오늘은 xml 파일로 쓰고 읽던 것을 json으로 변경해보았다. Json파일을 읽기를 하던 도중에 한글이 ?로 깨져서 나왔다. 처음에는 json으로 읽어들일 때 인코딩이 필요한 줄 알고 찾아보았지만, json은 원래 utf-8을 지원한다는 글을 보게 되었다. 때문에 자연스레 json파일의 인코딩 문제라는 것을 깨닫고 변경해주니 한글이 출력되었다!!
TryParse()까지는 스스로 생각해냈지만, 과제 해설 영상을 보니 굉장히 깔끔한 방식을 쓰시길래 나도 수정했다.
if (!isNumeric || CheckValidInput(behavior, min, max) == false)
을 통해 변환 가능 여부와 함께 유효한 입력값인지 확인하는 함수를 if문의 조건으로 걸어서 사용하셔서 나도 따라해보았다. 확실히 매번 값을 비교하는 것보다 매우 깔끔했다!
private static bool CheckValidInput(int behavior, int min, int max)
{
if(behavior >= min && behavior <= max) { return true; }
return false;
}
// 플레이어의 행동 입력 받기
static int getBehavior(int min, int max)
{
int behavior;
bool isNumeric;
// 잘못된 입력 시 에러 메세지 출력
while (true)
{
Console.WriteLine("\n원하시는 행동을 입력해주세요.");
Console.Write(">> ");
try
{
isNumeric = int.TryParse(Console.ReadLine(), out behavior); // 입력 받은 값이 정수형 int 값인지 확인해서 맞을 경우 Parse 시켜주기
if (!isNumeric || CheckValidInput(behavior, min, max) == false) { throw new CheckInputException("잘못된 입력입니다.\n"); } // 아닐 경우 에러 메시지 출력
else break;
}
catch (CheckInputException ex)
{
Console.ForegroundColor = ConsoleColor.DarkRed;
Console.WriteLine(ex.Message);
Console.ResetColor();
}
}
return behavior;
}
private static bool CheckValidInput(int behavior, int min, int max)
{
if(behavior >= min && behavior <= max) { return true; }
return false;
}
이후, getBehavior()를 switch문의 제어문으로 활용했다.
// 플레이어의 행동 값 받기
switch (getBehavior(0, 5))
{
case 1:
ShowMyStats();
break;
case 2:
ShowMyInventory();
break;
case 3:
ShowShop();
break;
case 4:
EntertheDungeon();
break;
case 5:
GotoInn();
break;
default:
return;
}
Json 코드를 열심히 찾아보았는데 너무 어렵게 작성되어 있었다.. 아마도 json 파싱때문이려나? 결국 과제 해설 ppt에서 코드를 찾았다. 등잔 밑이 어두웠던 것이다.... 🛋️
그 외에는, 저번 토요일날 구매한 스피커가 자꾸 오작동을 일으켜서 하루종일 생고생을 했다... 에휴 🫠