在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]