在写算法题的时候,基本上都需要输入输出语句,在大多数练题网站上当想用js书写算法题时,发现不知道怎么输入,其实Node是提供了一个readline模块来实现此功能的

tip

笔者用过的练题网站只有leetcode在使用js书写时只需要实现功能函数就行,就不需要考虑如何从键盘录入内容

简单使用

const readline = require('readline')

const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
})
// 监听键入回车事件
rl.on('line', (str) => {
// str即为输入的内容
if (str === 'close') {
// 关闭逐行读取流 会触发关闭事件
rl.close()
}
console.log(str);
}) // 监听关闭事件
rl.on('close', () => {
console.log('触发了关闭事件');
})

假设上面的文件叫read.js,接下来我们直接输入下面运行

node read.js

上面的逻辑是输入字符串 close时退出程序

感觉并没有其它语言用起来那么安逸,比如:

  • C++:cin>>param
  • C:scanf("%s",&param)
  • C#:param = Console.ReadLine()
  • ...等等

怎样才能变得向上面那样用起来输入一点呢?我们为上面代码包装一下

封装

const readline = require('readline')

const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
}) /**
* 读入一行
*/
function readLine() {
return new Promise(resolve => {
rl.on('line', (str) => {
resolve(str)
})
})
} /**
* 退出逐行读取
*/
function close() {
rl.close()
} module.exports = {
readLine,
close
}

我们在编写一个新的test.js,上面的叫read.js 放在同一目录下

const { readLine, close } = require('./read')

/**
* 运行的main函数
**/
async function main() {
let i = await readLine();
while (+i !== 0) {
console.log(`你输入的是${i}`);
i = await readLine();
}
close();
} // 调用执行
main();

现在用起来就方便多了,只需要在函数结束时加上close不然不会退出

使用nodejs从控制台读入内容的更多相关文章

  1. nodejs抓取页面内容,并分析有无某些内容的js文件

    nodejs获取网页内容绑定data事件,获取到的数据会分几次相应,如果想全局内容匹配,需要等待请求结束,在end结束事件里把累积起来的全局数据进行操作! 举个例子,比如要在页面中找有没有www.ba ...

  2. idea 未实现接口红线提示,重复代码波浪线提示,自动换行,控制台输出内容自动换行

    01,Could not autowire. No beans of 'UserMapper' type found 01.1,问题描述,通过反射动态实现的接口在调用时会出现以上提示,常见的如 ORM ...

  3. 在浏览器控制台输出内容 console.log(string);

    在浏览器控制台中写如数据 1添加    <script type="text/javascript">djConfig = { isDebug: true };< ...

  4. java--从控制台读入一些数据

    学一些东西应该,学以致用: 现在我开始使用流的办法从控制台读取数据 import java.io.*; public class Demo2{ public static void main(Stri ...

  5. nodejs往文件写入内容代码

    const fs = require("fs"); // fs.wirteFile有三个参数 // 1,第一个参数是要写入的文件路径 // 2,第二个参数是要写入得内容 // 3, ...

  6. CLion 控制台输出内容乱码问题的解决方法

    问题再现 #include "stdio.h" #include "stdlib.h" int main() { printf("嘤嘤嘤") ...

  7. nodejs 在headers添加内容发送到后端

    app.all('*', function(req, res, next){ req.headers['COOKIE'] = 'Your Cookie' next() })

  8. NodeJs 遍历文件夹内容 上传到服务器.并输出上传记录文件

    var path = require('path'); var glob = require('glob') var fs = require('fs'); var Promise = require ...

  9. 06--Java--Scanner类读入控制台

    Scanner类读入控制台 1.什么是Scanner类 Scanner类是java中从控制台读入用户输入的类 import java.util.Scanner; public class a_Lear ...

  10. console.read()读入的内容

    今天写的特别简单的代码,大体是一个模式选择,从控制台读入一个数,然后做出相应的选择. 代码如下: using System; using System.Collections.Generic; usi ...

随机推荐

  1. 打造个性化日历:Python编程实现,选择适合你的方式!

    在本文中,我们将使用Python编写一个简单的日历程序.虽然市面上已经存在现成的日历功能,并且有第三方库可以直接调用实现,但我们仍然希望通过自己编写日历程序来引出我认为好用的日历实现.希望这篇文章能够 ...

  2. 【幻兽帕鲁】专用服务器攻略来啦!一键部署,5s开服

    本文分享自华为云社区<全网最易用.最实用.最好用的[幻兽帕鲁]专用服务器攻略来啦!一键部署,5s开服!>,作者: 云容器大未来. 华为云隆重推出"帕鲁服务器-云耀云容器版&quo ...

  3. vue3的宏到底是什么东西?

    前言 从vue3开始vue引入了宏,比如defineProps.defineEmits等.我们每天写vue代码时都会使用到这些宏,但是你有没有思考过vue中的宏到底是什么?为什么这些宏不需要手动从vu ...

  4. 【framework】AMS启动流程

    1 前言 ​ AMS 即 ActivityManagerService,负责 Activy.Service.Broadcast.ContentProvider 四大组件的生命周期管理.本文主要介绍 A ...

  5. linux下使用find查找并操作文件

    介绍 最近在centos7上部署了一套环境,需要根据文件名找到程序运行路径下的文件,并进行移动文件操作,为此查阅了一番,记录下这个操作的脚本.我想很多人都会有这个需求,查找简单,但是要对对查找到的文件 ...

  6. Oracle 中UNDO与REDO的区别详解

    一 为了更清楚的看出2者区别,请看下表: UNDO                                                                   REDO Rec ...

  7. Java I/O 教程(三) FileOutputStream类

    Java FileOutputStream 用于将字节数据写入文件. 如果你需要将原始数据写入文件,就使用FileOutputStream类. Java.io.FileOutputStream cla ...

  8. Mysql 插入timestamp没有使用默认值问题

    在一次升级过程中,发现Mysql插入数据报了个错 Column 'create_time' cannot be null. 但是看了下这个字段虽然是非null,但是是有默认值的 `create_tim ...

  9. vscode中python类型注解插件及自动格式化

    # 插件名称 Python Type Hint # 如何ctrl+s保存时格式化,推荐安装yapf包 (flake8貌似不支持有类型注解的) 1.安装yapf包:pip install yapf 2. ...

  10. python Apscheduler持久化

    from pytz import utc from apscheduler.schedulers.background import BackgroundScheduler from apschedu ...