ProcessField()에서 엔터를 누르면 몬스터가 새로생성되는것을 막고싶습니다.
ProcessField 실행중에 1과 2중 아무것도 선택하지 않고 엔터를 누르면 그냥 ProcessField가 다시 실행되어 다른 몬스터가 생성됩니다.
제가 해결한 방법은
private void ProcessField()
{
Console.WriteLine("필드입장");
CreateRandomMonster();
FieldSelect();
}
private void FieldSelect()
{
Console.WriteLine("[1]싸운다.");
Console.WriteLine("[2]일정 확률로 도망친다.");
string input = Console.ReadLine();
switch (input)
{
case "1":
ProcessFight();
break;
case "2":
int randValue = rand.Next(0, 101);
if (randValue < 33)
mode = GameMode.Town;
else
{
ProcessFight();
}
break;
default:
Console.WriteLine("선택지중 하나를 선택하십시오");
FieldSelect();
break;
}
이렇게 함수로 따로 빼서 구현하니, 동작하긴 하는데, 뭔가 찝찝해서 여쭤봅니다.
이런식으로 함수로 따로 빼서 구현하는 방법 말고 다른 방법이 있을까요?
답변 1
1
FieldSelect()에서 또 FieldSelect()를 재귀적으로 호출하는 것은 살짝 위험합니다.
함수를 호출하려면 내부적으로 스택 프레임이라고
해당 함수 호출하기 위한 몇몇 정보가 스택 메모리에 추가되는데,
유저가 3을 무한정 누르다 보면, 스택 메모리가 터져서 크래시가 날 수 있습니다.
단순히 1, 2 입력을 강제하고 싶다면,
string input = "";
while (input == "1" || input == "2")
{
input = Console.ReadLine();
}
과 같이 input 단계에서 루프를 도는 등 다양한 방법으로 해결이 가능합니다.
0
선생님 말대로 구현해본 결과 프로세스 필드에서 무한 루프가 일어나버리는 현상이 일어났습니다...
디버깅을 해본 결과 input 에 readLine이 먼저 할당되지 않아서 그냥 멈추지 않고 ProcessField가 계속 실행되고 있었습니다.

제 나름대로 다시 고민해서 코드를 짜봤는데
string input = Console.ReadLine();
if (input == "1" || input == "2")
{
switch (input)
{
case "1":
ProcessFight();
break;
case "2":
int randValue = rand.Next(0, 101);
if (randValue < 33)
{
mode = GameMode.Town;
}
else
{
ProcessFight();
}
break;
}
}
else
{
Console.WriteLine("정확한 수를 입력해주세요");
}
이렇게 짜니까 제대로 멈추고, Input도 받아집니다. 혹시 이렇게 구현했을 때 발생할 수 있는 문제가 있을까요?
0
while (input != "1" && input != "2")
{
input = Console.ReadLine();
}
조건이 거꾸로 되어 있었네요 본의아닌 낚시 죄송합니다 ㅎㅎ
그리고 일단 코드가 잘 동작하면 넘어가도 상관없습니다.
수영을 처음 배울 때 중요한건 물에 뜨고 앞으로 나아가는 것이지,
동작의 우아함과 포즈는 아주 훗날 신경쓸 문제인 것과 마찬가지입니다.
Generic에 대한 질문 있습니다.
0
113
2
2022 버전에 커뮤니티 버전이 없는데 2026 버전으로 해도 무관?
0
226
2
다형성 캐시 문제
0
136
3
.
0
77
1
프로퍼티 강의 질문 있습니다.
0
85
1
이후 커리 질문
0
92
1
static
0
103
2
강의에는 새로운 클래스 파일을 생성하면...
0
81
1
생성자의 이름 선언
0
70
1
9:03 Divide(10 , 3) 부분 질문입니다
0
93
1
깃허브 관련 질문 있습니다.
0
249
1
비쥬얼 스튜디오 업데이트가 된건가요..? 매개변수 오류 관련 질문
0
258
1
C# 시리즈 || C++ 시리즈 자료구조 강의에 대한 질문입니다!
0
311
2
Activator 질문있습니다
0
343
1
이넘 타임 선언 질문
0
359
1
Sort 오름차순, 내림차순
0
333
1
질문 있습니다.
0
254
1
팩토리얼 문제
0
277
1
Sort함수 질문있습니다.
0
272
1
다형성 함수 질문 있습니다.
0
231
1
질문이 있습니다.
0
236
1
섹션2 연습문제 질문입니다.
0
223
1
안녕하세요~서버에 대해 질문이 있습니다.
1
289
1
텍스트 색깔이 제 편집기와 달라서 수강에 어려움이 있습니다ㅜㅜ
0
401
1





