我试图从stdin读取test case
值,然后从stdin读取另一个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值?
答案 0 :(得分:2)
每次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)
}
})