如果我想从 C 中的输入流读取我写 scanf
., NodeJS 中是否有等效的方法来做同样的事情?
例如,这是 C
中的代码int n,
m,
i;
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%d", &m);
............
}
这是我在 Node 中的起点...TODO 指示我被卡住的地方:
process.stdin.resume();
process.stdin.setEncoding("ascii");
process.stdin.on("data", function (input) {
var n = +input;
for (var i = 0; i < n; i++) {
// TODO
}
});
最佳答案
对于初学者来说,在 NodeJS 中为可读流调用 scanf
和 data
事件是不等价的。在 NodeJS 示例中,您需要解析收到的输入 block 。
您可以通过将 on 方法的主体替换为一个简单的方法来检查这些 block 是如何发送给您的:
process.stdout.write('onData: ' + input + '\n');
考虑到 input
如何包含您的数据,您需要使用某种方法提取感兴趣的字符串,然后使用 parseInt
。假设每个 input
有 1 个整数,也许是解决您问题的一种天真的方法:
var n = 0;
var m = 0;
var state = 0;
process.stdin.on('data', function (input) {
switch (state)
{
case 0:
// we're reading 'n'
n = parseInt(input.trim(), 10);
state++;
break;
default:
// we're reading 'm'
m = parseInt(input.trim(), 10);
if (state++ == n)
{
// we've read every 'm'
process.exit();
}
break;
}
});
我不太喜欢这种将数据传输到 NodeJS 事件循环的方法,您应该改为查看命令行参数、配置/输入文件或其他一些方法。
关于javascript - nodejs 中的 C scanf 等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14238187/