본문 바로가기
TIL

이름 입력 흐름 제어..

by vvin39 2025. 4. 17.

내일배움캠프 9일차 TIL

❓오늘 겪은 문제

어제부터 Text RPG 과제하고 있는데 모든 기능에서 선택지 이외의 입력을 했을 때 오류 확인하다가 

이름 입력 후 저장 / 취소를 선택하는 흐름에서 의도와 다르게 작동하는 걸 발견했다!!

 

문제 상황

NameInput() 함수에서 사용자가 이름을 입력하고, 저장(1) 또는 취소(2)를 선택해야 하는 구조였는데

그런데 1, 2 이외의 잘못된 값을 입력하면 이름이 공백("")으로 초기화되어버리는 문제가 생기는 것!

 

while (true)
{
    player.Name = Console.ReadLine(); // 여기가 문제
    ...
}

 

 

player.Name에 바로 입력값을 할당하는 코드가 루프 안에 있었는데

선택지에서 "잘못된 입력"이 들어오면 루프가 다시 시작되면서 Console.ReadLine()이 또 실행됨

사용자는 이름을 다시 입력한 적이 없지만, 입력값 없이 루프만 도는 상황에서 player.Name = ""으로 바뀌어버렸다..

 

이게 문제인줄 모르고 잘못입력했을 때 아무 키나 입력받아 다시 처음부터 반복하는 반복문 내 로직 문제인 줄 알고 계속 수정하고있엇음..

 

해결 방법

이름 입력하는 함수와 저장하는 선택지를 분리

프로젝트를 처음 실행하면 나오는 화면에서 사용자에게 이름을 입력받고,

입력을 확정할 건지 다시 입력할 건지는 다른 함수에서 입력받기로!

public static void StartScreen()
{
    Console.WriteLine("던전에 오신 여러분 환영합니다.");
    Console.WriteLine("원하시는 이름을 설정해주세요.");
    Console.Write(">> ");
    player.Name = Console.ReadLine();
}

public static void NameInput()
{
    while(true)
    {
        Console.Clear();
        Console.WriteLine($"입력하신 이름은 {player.Name} 입니다.\n");
        Console.WriteLine("1. 저장");
        Console.WriteLine("2. 취소");
        Console.Write("\n원하시는 행동을 입력해주세요.\n>> ");

        string input = Console.ReadLine();

        switch (input)
        {
            case "1":
                break;
            case "2":
                Console.Clear();
                StartScreen();
                continue;
            default:
                Console.WriteLine("잘못된 입력입니다. 아무 키나 눌러 계속...");
                Console.ReadKey();
                continue;
        }
        break;
    }
}

 

 

이러한 구조를 통해 이름을 다시 입력할 필요 없이 잘못된 입력에도 기존 입력을 유지할 수 있었다.

그리고 불필요한 중복 호출(NameInput() 내에서 자기 자신 호출)을 제거하여 스택 낭비를 방지했다.

 

💡 오늘의 교훈

  • 루프 안에 입력을 두면 무조건 반복될 수 있다 → 입력 로직은 루프 밖에!
  • 유저 입력 처리 시, 로직 순서를 신경 써야 값이 불필요하게 초기화되지 않는다.
  • Console.ReadLine()이 입력마다 실행되는 타이밍을 정확히 이해하는 것이 중요!

🧠 기억할 포인트

  • while 루프에서는 입력 / 처리 / 검증분리해서 구성하자
  • 사용자의 상태(입력값, 선택 등)는 유지될 수 있어야 UX가 자연스러움
  • Console.ReadLine()이 호출되는 위치 = 사용자의 입력을 요구하는 시점임을 명확히 인식할 것

 

 

 

최근댓글

최근글

skin by © 2024 ttuttak