ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JS/Node.js] readline을 통한 입출력
    Algorithm & Data Structure 2022. 3. 12. 07:50
    SMALL

    자바스크립트에서 콘솔을 통해 값을 입력받기 위해 몇 가지 방법이 있는데,

    그 중 readline 모듈을 이용한 방법에 대해 정리하려 한다.

    (앨리스를 통해 공부한 것을 정리하였음)

     

    기본 코드는 다음과 같다.

    const readline = require("readline"); //readline 모듈 가져옴
    const rl = readline.createInterface({
      input: process.stdin,
      output: process.stdout,
    }); //readline 모듈을 이용해 입출력 객체 생성
    
      rl.on("line", (line) => { 
          // 한 줄씩 입력받은 후 실행할 코드
         // 입력된 값은 line에 저장된다.
          rl.close(); // close가 없으면 입력을 무한히 받는다.
      });
      rl.on('close', () => {
        // 입력이 끝난 후 실행할 코드
      })

    on 메소드를 이용해서 'line' 이벤트가 발생 시 실행할 동작을 지정할 수 있다.

    입력 이벤트는 줄바꿈을 나타내는 \n, \r, \r\n 문자나 enter를 누를 때 발생한다.

    'close'이벤트도 'line' 이벤트와 비슷하게 작성하는데,

    더 이상 입력 받을 게 없을 때 rl.close()를 호출해서 발생시킨다.

    1. 한 줄 입력받기

    const readline = require("readline");
     
    const rl = readline.createInterface({
        input: process.stdin,
        output: process.stdout,
    });
     
    rl.on("line", (line) => {
        console.log(line);
        rl.close();
    });
     
    rl.on('close', () => {
        process.exit();
    })

    2. 여러 줄 입출력

    let cnt = 0;
    rl.on("line", (line) => {
    	cnt +=1; //입력 횟수 증가
        
        if (cnt ===1) {
        	//첫번째 입력일 때 동작
        } else if (cnt===2) {
        	//두번째 입력일 때 동작
        } else if (cnt===3) {
        	//세번째 입력일 때 동작
        } else {
        	//네번째 입력일 때 동작
            rl.close();
        }
    }).on("close", ()=> {
    	//입력 종료 후 동작할 코드
    });

    3.n줄 입력

     첫번째 줄에 입력된 수를 변수로 저장해뒀다가 cnt 변수가 그 숫자보다 커질 때까지 입력을 받으면 된다.

    let cnt = 0; //몇 번째 입력인지 기록
    let n = 0; //첫번째 줄에 입력된 수
    let arr = [];
    
    rl.on("line", (x)=> {
    	cnt +=1; //입력 횟수 증가
        if(cnt===1) {
        	n = x; //1번째 입력인 경우 주어질 입력 개수 기록
        } else {
        	arr.push(x); //이후 입력되는 n개의 입력은 배열에 저장
        }
        if (cnt>n) {
        	rl.close(); //기록이 입력받을 수보다 커지면 종료
        }
    }).on("close",() => {
    	console,log(arr);
    });

    4. 공백을 기준으로 값 입력받기

    let arr = [];
    
    rl.on("line", (line) => {
    	arr = line.split(' ').map(el=>parseInt(el));
        rl.close();
    }).on("close",() => {
    	arr.forEach(el=> {
        	console.log(el)
            });
        process.exit();
    })
    
    //입력
    //1 2 3
    
    //출력
    //1
    //2
    //3

    숫자 연산을 위해 map함수를 사용하고, parseInt를 이용해 문자를 숫자로 변환한다.

     

    반응형

    댓글

Designed by Tistory.