1. 숫자 야구 코딩

1. 문제점

Node.js 환경에서 터미널의 입력값을 읽어오는 readline 모듈.

rl.on("line", (line) => {
    // 한 줄씩 입력받은 후 실행할 코드
    // 입력된 값은 line에 저장된다.
    rl.close(); // 필수!! close가 없으면 입력을 무한히 받는다.
});
rl.on('close', () => {
    // 입력이 끝난 후 실행할 코드
        process.exit();
})

확인해보니 Callback 함수이다. 입력값을 받으면, 메소드 안에서만 활용해야 하는 상황.

숫자 야구이므로, While 반복문을 돌리거나 다른 방법을 찾아야한다.

2. 내가 해본 시도

→ 당연히 안됨. Scope 자체가 달라지기 때문

→ 이것도 안됨. readline을 여러번 호출해야 하기 때문

→ Scope가 달라서 안된다.

→ 아쉽게도 없었다.

3. 어떻게 해결했는가??

// 함수 지정 후, 그 안에 readline 메소드를 사용.
   // 반복문으로 삽질해보기 readline 메소드 밖에도 써보고, 안에도 써보고..
   // 결국 답은 GPT에 물어보기였다.
   // 재귀 호출 사용을 위해 함수로 먼저 정의 후, readline 메소드를 사용했다.
   const askanswer = () => {
      rl.question(`${count}번째 시도:`,(input) => {
         // input 문자열을 숫자형으로 바꾼 후, 배열로 정리
         const My = input.split('').map(x => Number(x));
         // 채점 실행
         const result = scoring(answer, My);

         // 조건문을 통해 게임을 끝낼지, 계속할지 설정
         if (result.s === 3) {
            console.log(`${count}번만에 맞히셨습니다.`);
            console.log('게임을 종료합니다.');
            // 끝난 경우, readline을 끄고 밖으로 나가기.
            rl.close();
         } else {
            console.log(`${result.s}S${result.b}B`);
            count++;
            // 틀렸을 경우 다시 돌아가는 기능 (재귀함수 사용)
            askanswer();
         }
      })
   }
   // play함수 내에서 askanswer 함수 실행하기
   askanswer();
}