我无法理解JavaScript如何解析此输入。有人可以向我解释一下吗?

时间:2017-01-01 20:56:46

标签: javascript node.js input

我正在进行初学者级编程挑战。我理解算法部分,但我不明白它是如何输入的。

我知道它需要输入三行。有一些预编写的代码将输入放入"输入"变量。我该如何处理这个"输入"变量来获取各行中的数据?

输入第1行:订购的商品数量,安娜没有吃的商品的索引

输入第2行:每件商品的价格

输入第3行:安娜的费用

示例输入:

4 1

3 10 2 9

12

预期输出:5

这是我的代码搞砸了,我正在努力解决这个问题:

function processData(input) {

    var input_temp = input.split("\n");
    var allergyIndex = input_temp[0][1];
    var array = input_temp[1].split(" ");
    var annaCharged = input_temp[2];
    var annaMealsCost = 0;

    for (var i = 0; i < array.length; i++){
        if (i !== allergyIndex){
            annaMealsCost += array[i];
        }
    }

    if (annaMealsCost / 2 === annaCharged){
        console.log("Bon Appetit");
    } else {
        console.log(annaCharged - annaMealsCost / 2);
    } } 

// below is the code that is pre-written, which I don't understand at all:

process.stdin.resume(); process.stdin.setEncoding("ascii");
_input = ""; process.stdin.on("data", function (input) {
    _input += input; });

process.stdin.on("end", function () {    processData(_input); });

1 个答案:

答案 0 :(得分:0)

当程序运行时,它将监听要输入的数据,直到EOF个字符。此时,将调用processData,直到该点输入所有行。

如果您正常运行程序(node my-program.js),它将等待输入。您可以输入数据,最后通过手动输入process.stdin来触发end Cmd + D事件,该EOF将被解释为process.stdout个字符。

管道

另一种选择是输入输入,就像输入文本文件一样。

默认情况下,打印文件将转到process.stdin。但您可以使用竖线字符(|)将打印重定向到4 1 3 10 2 9 12

<强> input.txt中

cat input.txt | node my-program.js

终端提示

cat input.txt

命令node my-program.js的输出将用作IGNORE的输入。