JS의 내장 모듈 readline 사용해서 값 입력받기

holang-i·2021년 8월 17일
0
post-custom-banner

알고리즘 문제를 풀기위해 사용자로부터 값을 입력받는 방법을 알아보았다.
prompt를 이용하는 방법을 사용하지않고 자바스크립트의 내장 모듈readline 모듈을 사용해서 문제를 해결하였다.

readline 모듈의 rl 객체는 event-driven 방식으로 동작한다.

  • event-driven 방식: 이벤트에 반응하여 동작을 변경하는 방식(대화형 프로그램을 만드는 데 목적을 둠)

line: 한 줄이 입력되는 이벤트
close: EOF(End of File, 파일 끝, 데이터 소스로부터 더 이상 읽을 수 있는 데이터가 없음을 나타냄) or close()함수를 호출했을 때 발생하는 이벤트


한 글자 입력받기

사용자로부터 한 글자만 입력받음

// 입력받은 매개변수 출력
function backToFront(num) {
  console.log(num);
}

// 한 개 입력: 띄어쓰기 없는 한 개의 입력
const readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

let input;

rl.on('line', function (line) {
  input = parseInt(line);
  // 한 줄을 입력받고 종료시킴
  rl.close();
}).on('close', function () {
  // logic
  backToFront(input);

  // process 종료
  process.exit();
});

사용자로부터 숫자 7일 입력받을 경우


한 줄 입력받기 (띄어쓰기 포함)

사용자로부터 띄어쓰기를 포함한 한 줄을 입력받음

function backToFront(num) {
  console.log(num);
}

// 한 줄 입력: 띄어쓰기 포함
const readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

let input;
let arr = [];

rl.on('line', (line) => {
  // line을 통해서 사용자가 입력한 문자열이 들어온다.
  input = line;
  rl.close();
}).on('close', () => {
  if (typeof input === Number) {
    // 입력된 문자열이 전부 정수일경우 형변환
    arr.push(input.split(' ').map((el) => parseInt(el)));
  }
  // 한 줄에 입력된 값을 띄어쓰기 기준으로 arr 배열에 삽입
  arr.push(input.split(' ').map((spell) => spell));
  backToFront(arr[0]);
  process.exit();
});

사용자로부터 띄어쓰기를 기준으로 값 여러개를 입력받은 결과


여러 줄 입력받기

function backToFront(num) {
  console.log(num);
}

// 여러 줄 입력
const readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

let input = [];
let arr = [];

rl.on('line', (line) => {
  // 여러 줄 입력
  input.push(line);
  // rl.close()가 없어서 계속 입력 (local에서 입력을 중지: ctrl + D)
}).on('close', () => {
  // 입력 값 처리
  let n = parseInt(input[0]);

  if (typeof input[1] === Number) {
    // 띄어쓰기 기준으로 배열에 넣기
    let arr = input.map((el) => el.split(' ').map((el) => parseInt(el)));
  }
  let arr = input.map((el) => el.split(' ').map((el) => el));

  backToFront(arr);
  process.exit();
});

사용자로부터 Enter를 기준으로 여러 값을 입력받은 결과






post-custom-banner

0개의 댓글