在nodejs中相当于C scanf

如果我想从C中的inputstream读取我写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和可读stream的data事件并不相同。 在NodeJS的例子中,你将需要parsing你接收到的input块。

你可以通过用一个简单的方法replace你的方法体来检查这些块是如何发送给你的:

 process.stdout.write('onData: ' + input + '\n'); 

鉴于如何input包含您的数据,您将需要使用一些方法来提取感兴趣的string,然后使用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事件循环的手段,你应该看看命令行参数,configuration/input文件,或其他手段。

检查sget 。

 var sget = require('./sget'); var width = sget('Width?'), height = sget('Height?'), area = width * height; console.log('Area is', area); 

这个function会做你所要求的:

 function readNums(s) { // Split it up into numbers and spaces var array = s.split(/(\d+)/); // Keep just the numbers array = array.filter(function(i) {return "" + +i == i}); // Convert back to a number array = array.map(function(i) {return +i}); // How many elements should there have been? var maxLen = array.shift(); if (array.length < maxLen) { throw "Not enough enough numbers"; } else { array.length = maxLen; } return array; } console.log(readNums("4 10 20 30 40 50 60 70")); 

结果:

 [10, 20, 30, 40]