◄返回
JavaScript 的标准输入流 | @a1375625918

JavaScript 的标准输入流

2023/04/16 17:27

分类:编程


最早是在力扣上看一些算法题,当时还没有意识到使用 JavaScript 答题会有任何问题。比如在这道回文数中,平台就提供了这样一个函数。我只需要在函数里使用参数 x 写好代码,最后返回一个题目要求的布尔值就行。

1
2
3
4
5
6
7
/**
* @param {number} x
* @return {boolean}
*/
var isPalindrome = function(x) {

}

在前些天程序设计竞赛的宣讲会上,学校计算机社团的大佬提到可以去看看洛谷的题单。这一看搞得我 a + b 都写不出来了。平台使用标准输入流输入数据,并从标准输出流读取结果。

当然,console.log() 就能很容易地输出一些东西。但要说输入,C 语言有 scanf() ,C++ 有 cin ,Python 中也有 input() 。可要用 JavaScript 的话,我确实不知道该怎么办了。毕竟,无论是浏览器调试控制台还是 Node.js 命令行,我都没有遇到过这种场景。

幸运的是,我在这里看到了答案,但也远比我想象的要复杂。

1
2
3
4
5
const fs = require('fs')
const data = fs.readFileSync('/dev/stdin')
const result = data.toString('ascii').trim().split(' ').map(x => parseInt(x)).reduce((a, b) => a + b, 0)
console.log(result)
process.exit() // 请注意必须在出口点处加入此行

fs 库去读取 /dev/stdin ,确实是我想不到的操作。这种一眼 Linux 的玩意显然也没法在 Windows 下使用。

还有一种方法是 process.stdin.on() 。这种基于事件监听的异步玩意也不适合在算法题里用。

1
2
3
process.stdin.on('data', data => {
console.log(`你按下了 ${data.toString()}`)
})

要不,以后干脆就用 C++ 或者 Python 刷题好了……

别卷了啊喂……卷不动了……


© 2023 @a1375625918

findway.top 蜀ICP备2023008060号-1