【问题标题】:using readline stdin in node.js在 node.js 中使用 readline 标准输入
【发布时间】:2020-11-16 09:47:05
【问题描述】:

我正在 kattis 中处理 this problem,我需要在第一行输入第二个整数。整数可以是 1-999。在下面的示例输入中,我需要显示 80:

2 80
carrots
bunnies

这是我的代码:

const readline = require("readline");

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});
  
rl.on("line", (line) => {
    let inputData = line;
    console.log(inputData)
});

在控制台日志 inputData 中,它显示整个输入。我还尝试使用 let inputData = line.split(' '); 分割线。结果是,但我仍然不知道如何能够得到80:

[ '2', '80' ]
[ 'carrots' ]
[ 'bunnies' ]

【问题讨论】:

    标签: node.js readline


    【解决方案1】:

    如果它是一个字符串,您可以使用str.split(" ")(其中 str 是一个字符串)。你会得到一个字符串数组,比如['2','80'],你可以从中访问第一个元素。

    例如:

    let inputData = line.split(" ")
    console.log(inputData[1]);
    //output: 80
    

    【讨论】:

    • 这是我现在的代码 let inputData = line.split(' '); console.log(inputData[1]) 但输出是 80 undefined undefined
    【解决方案2】:

    基本上,该问题要求您解析并打印第一行的第二个数字(this answer 显示如何 split 一个字符串并选择一个索引),然后忽略所有剩余的行。

    如果您不注销您的 .on("line", ...) 处理程序,它将引发错误或在后续行中打印错误的输出。

    一种方法是使用.once 而不是.on 在第一行被消费后取消注册处理程序:

    const readline = require("readline");
    
    const rl = readline.createInterface({
      input: process.stdin,
      output: process.stdout,
    });
      
    rl.once("line", line => console.log(line.split(/ +/).pop()));
    

    现在,通常对于 Kattis 问题,您也需要使用其余数据。请参阅Getting input in Kattis challenges - readline js 了解如何执行此操作。

    【讨论】:

      猜你喜欢
      • 2023-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-25
      • 1970-01-01
      • 2015-10-15
      相关资源
      最近更新 更多