某牛官方帮助文档镇楼
其中已经给出了js的样例,以简单的A+B题目为例
var readline = require('readline')
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
})
rl.on('line', function(line) {
var tokens = line.split(' ')
console.log(parseInt(tokens[0]) + parseInt(tokens[1]));
})
尝试使用node本地运行,我们可以发现,每输入一行回车后即会输出结果,然后可以继续输入
执行结果我们来解读一下怎么处理的输入输出
//每读一行,即一行输入结束敲回车,执行事件line对应的方法(这里为计算A+B并输出)
rl.on('line', function(line) {
var tokens = line.split(' ')
//直接使用console.log进行输出,一次输出即为一行,输出多行可多次使用console.log
console.log(parseInt(tokens[0]) + parseInt(tokens[1]));
})
关于读多行的问题,理清以后就可以自行解决了,如下方法(看上去好像不太优雅)
// 获取三行输入的值,输出它们的和
var countLine = 1
var tokens = []
rl.on('line', function(line) {
tokens.push(line)
if(countLine === 3) {
//求和
console.log(
tokens.reduce(function(sum, item) {
return sum + parseInt(item)
}, 0)
);
countLine = 1
tokens = []
} else {
countLine++
}
})
但是如果题目中并没有给出具体的输入行数,上面的方法就不可取了,我们需要一次性读取所有的输入然后再处理输出,操作如下
process.stdin.resume();
process.stdin.setEncoding('ascii');
var input = "";
var input_array = "";
process.stdin.on('data', function (data) {
input += data;
});
process.stdin.on('end', function () {
input_array = input.split("\n");
// 处理input
});
我个人比较喜欢使用第一种方法,在本地终端使用也很方便,第二种方法的话,如果在终端中使用,需要将end事件修改成
process.on('SIGINT', function() {
// 你的处理
process.exit(0);
})
这样的话,使用ctrl+c
就可以得到输出
吐槽某马和某鹅
习惯了牛客的node输入输出以后其它的都不适应了……
赛马网node官方给出的是上面说到的第二种处理方式,第一种应该也行但我没有试过。注意:赛马将js和node分为两种不同的输入输出,个人很不适应所谓的js输入输出,虽然看上去好像很简单,但是本地不好测啊……输出好像还是用定制的print函数来着……对了,练习的时候还有node选项,等到正式笔试就只有js选项了,神坑……附:赛码网在线编程系统使用指南
腾讯则根本没有node选项,只有定制的js输入,使用固定的main函数接受输入,我至今还不太理解……输出还是用console log
网友评论