某牛官方幫助文檔鎮(zhèn)樓
其中已經(jīng)給出了js的樣例腕够,以簡(jiǎn)單的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本地運(yùn)行,我們可以發(fā)現(xiàn)舌劳,每輸入一行回車后即會(huì)輸出結(jié)果帚湘,然后可以繼續(xù)輸入
執(zhí)行結(jié)果
我們來解讀一下怎么處理的輸入輸出
//每讀一行,即一行輸入結(jié)束敲回車甚淡,執(zhí)行事件line對(duì)應(yīng)的方法(這里為計(jì)算A+B并輸出)
rl.on('line', function(line) {
var tokens = line.split(' ')
//直接使用console.log進(jìn)行輸出大诸,一次輸出即為一行,輸出多行可多次使用console.log
console.log(parseInt(tokens[0]) + parseInt(tokens[1]));
})
關(guān)于讀多行的問題贯卦,理清以后就可以自行解決了资柔,如下方法(看上去好像不太優(yōu)雅)
// 獲取三行輸入的值,輸出它們的和
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++
}
})
但是如果題目中并沒有給出具體的輸入行數(shù)撵割,上面的方法就不可取了贿堰,我們需要一次性讀取所有的輸入然后再處理輸出,操作如下
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
});
我個(gè)人比較喜歡使用第一種方法啡彬,在本地終端使用也很方便羹与,第二種方法的話,如果在終端中使用庶灿,需要將end事件修改成
process.on('SIGINT', function() {
// 你的處理
process.exit(0);
})
這樣的話注簿,使用ctrl+c
就可以得到輸出
吐槽某馬和某鵝
習(xí)慣了牛客的node輸入輸出以后其它的都不適應(yīng)了……
賽馬網(wǎng)node官方給出的是上面說到的第二種處理方式跳仿,第一種應(yīng)該也行但我沒有試過诡渴。注意:賽馬將js和node分為兩種不同的輸入輸出,個(gè)人很不適應(yīng)所謂的js輸入輸出,雖然看上去好像很簡(jiǎn)單妄辩,但是本地不好測(cè)啊……輸出好像還是用定制的print函數(shù)來著……對(duì)了惑灵,練習(xí)的時(shí)候還有node選項(xiàng),等到正式筆試就只有js選項(xiàng)了眼耀,神坑……附:賽碼網(wǎng)在線編程系統(tǒng)使用指南
騰訊則根本沒有node選項(xiàng)英支,只有定制的js輸入,使用固定的main函數(shù)接受輸入哮伟,我至今還不太理解……輸出還是用console log