Как прочитать значение из stdin, используя nodejs - PullRequest
1 голос
/ 06 апреля 2019

Я пытаюсь прочитать test case значение из стандартного ввода, а затем я прочитаю другое значение N из стандартного ввода.Например:

If T = 3
I could have N = 200, N = 152, N = 35263

Впервые я работаю с readline:

const readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
  });


  rl.on('line', (line) => {
      for (let i = 0; i < line; i++) {
          rl.on('line', (N) => {
              console.log('N: ', N);
          })
      }

  })

Когда я тестирую код, я получаю следующее:

3
1
N:  1
N:  1
N:  1

Itчитать только одно значение N, и я не могу ввести 2 разных значения, тогда он отображает N = 1 3 раза.Как я могу это исправить, чтобы прочитать другое значение N в зависимости от количества тестов?

1 Ответ

2 голосов
/ 06 апреля 2019

Каждый раз, когда вы rl.on() создаете новый прослушиватель событий.Поэтому, когда вы делаете это в цикле, вы получаете несколько слушателей, которые все ждут и реагируют на ввод.Вам нужен один обработчик событий, который может понять состояние и делать то, что вы хотите.Например, чтобы взять первую строку в качестве количества входов, прочитать это количество входных данных и распечатать их, вы можете сделать что-то вроде:

const readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
  });

let n, res = []; // app state

rl.on('line', (line) => {  // only ONE event listener
    if (n === undefined) { // first input sets n
      n = line
      return
    }
    res.push(line)         // push until you have n items
    if (res.length >= n){
       rl.close()         // done
       console.log("results: ", res)
    }

})
...