javascript - 如何使用 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 = 1
3 次。我该如何解决这个问题以根据测试用例的数量读取不同的 N 值?
解决方案
每次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)
}
})
推荐阅读
- wpf - 当自定义组合框内的文本框获得焦点时,WPF 组合框选择不会被清除
- php - 如何将所有日期提取到选择数据表中
- javascript - 尝试将获取的 json 数据映射到 React 应用程序时未定义“状态”
- c# - 如何初始化列表
和有反射的元素? - java - java如何有效地存储4字节char数组
- r - 在 R 中使用 ggplot 将两个数字合二为一
- redux - 使用 applyMiddleware,调度不起作用
- medium.com - 如何查看要点片段。我的 chrome,Firefox 阻止了它
- keras - 如何使用 keras 的功能 api 获得每个类的概率?
- javascript - 为什么 GraphQL 订阅会在更新时删除查询?