首页 > 解决方案 > 如何使用 nodejs 从标准输入读取值

问题描述

我正在尝试从标准输入读取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

它只读取 N 的一个值,我无法输入 2 个不同的值,然后显示N = 13 次。我该如何解决这个问题以根据测试用例的数量读取不同的 N 值?

标签: javascriptnode.jsreadline

解决方案


每次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)
    }

})

推荐阅读