1) 숫자 이외의 값 또는 범위를 벗어나는 숫자를 입력할 때
오류가 발생하는 부분
// 상태를 출력하는 메서드 내부의 StartSelect 메서드 수정
public void DisplayStatus()
{
Console.WriteLine("상태 보기");
Console.WriteLine("캐릭터의 정보가 표시됩니다.");
Console.WriteLine();
Console.WriteLine($"Lv. {Level}");
Console.WriteLine($"{Name} ( {Job} )");
Console.WriteLine($"공격력 : {Attack}");
Console.WriteLine($"방어력 : {Defense}");
Console.WriteLine($"체 력 : {Health}");
Console.WriteLine($"Gold : {Gold} G");
Console.WriteLine();
Console.WriteLine("0. 나가기");
Console.WriteLine();
Console.WriteLine("원하시는 행동을 입력해주세요.");
int input = Convert.ToInt32(Console.ReadLine());
if (input == 0)
{
Program.StartSelect(); // StartSelect 메서드 호출
}
}
이 부분은 사용자로부터 입력을 받아 정수로 변환하는 역할을 합니다.
그러나 사용자가 숫자 이외의 값을 입력하면 FormatException이 발생하여 프로그램이 중단될 수 있습니다.
따라서 이 코드를 보호하기 위해서는 사용자의 입력이 정수로 변환 가능한지 먼저 확인해야 합니다. 이를 위해 int.TryParse() 메서드를 사용하여 사용자의 입력이 올바른지 확인할 수 있습니다.
1-1) 수정된 코드
public void DisplayStatus()
{
Console.WriteLine("상태 보기");
Console.WriteLine("캐릭터의 정보가 표시됩니다.");
Console.WriteLine();
Console.WriteLine($"Lv. {Level}");
Console.WriteLine($"{Name} ( {Job} )");
Console.WriteLine($"공격력 : {Attack}");
Console.WriteLine($"방어력 : {Defense}");
Console.WriteLine($"체 력 : {Health}");
Console.WriteLine($"Gold : {Gold} G");
Console.WriteLine();
Console.WriteLine("0. 나가기");
Console.WriteLine();
Console.WriteLine("원하시는 행동을 입력해주세요.");
int input;
if (!int.TryParse(Console.ReadLine(), out input))
{
Console.WriteLine("잘못된 입력입니다. 다시 입력해주세요.");
return;
}
if (input == 0)
{
Program.StartSelect(); // StartSelect 메서드 호출
}
}
2) Convert.ToInt32(Console.ReadLine())
/ 인벤토리 표시 메서드
public void DisplayInventory()
{
while (true)
{
Console.WriteLine("인벤토리 - 장착 관리");
Console.WriteLine("보유 중인 아이템을 관리할 수 있습니다.");
Console.WriteLine();
Console.WriteLine("[아이템 목록]");
for (int i = 0; i < Inventory.Count; i++)
{
string equippedSymbol = Inventory[i].Purchased ? "[E]" : "-";
Console.WriteLine($"{i + 1} {equippedSymbol} {Inventory[i].Name} | {Inventory[i].Description}");
}
Console.WriteLine();
Console.WriteLine("0. 나가기");
Console.WriteLine();
Console.WriteLine("원하시는 행동을 입력해주세요.");
int input;
if (!int.TryParse(Console.ReadLine(), out input) || input < 0 || input > Inventory.Count)
{
Console.WriteLine("잘못된 입력입니다. 다시 입력해주세요.");
continue;
}
if (input == 0)
{
StartSelect(); // StartSelect 메서드 호출
return;
}
}
}
이 경우 int.TryParse() 함수가 실패하고 false를 반환하게 되는데, 이는 입력이 잘못되었다는 것을 나타냅니다. 그럴 경우 "잘못된 입력입니다. 다시 입력해주세요."라는 메시지가 표시되고, 반복문이 다시 실행됩니다.
하지만 이 코드는 사용자가 0을 입력했을 때도 이와 같은 메시지가 나오는데, 이는 조건문 input == 0을 만족시키기 위해 int.TryParse() 함수가 실패하는 것입니다. 그 결과적으로 "잘못된 입력입니다. 다시 입력해주세요."라는 메시지가 나오고, 프로그램이 다시 반복문을 실행합니다.
해결 방법으로는 사용자가 0을 입력했을 때 이를 별도로 처리하여 int.TryParse() 함수를 호출하지 않고 바로 종료하도록 수정하는 것입니다. 코드를 아래와 같이 변경할 수 있습니다.
2-1) 수정된 코드
if (input < 0 || input > Inventory.Count)
{
Console.WriteLine("잘못된 입력입니다. 다시 입력해주세요.");
continue;
}
if (input == 0)
{
StartSelect(); // StartSelect 메서드 호출
return;
}
댓글 영역