You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NodeJS使用readline读取整数行报错TypeError: Cannot read property 'split' of undefined

问题:Node.js readline模块读取整数时报错TypeError: Cannot read property 'split' of undefined

在使用Node.js的readline模块读取一行整数时,触发了TypeError: Cannot read property 'split' of undefined错误。预期功能是读取一行中的4个整数,按规则输出结果,报错代码如下:

var readline = require('readline');
 
var rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

var entry= [];

rl.on('line', function (data) {    
    entry.push(data); //Want to get 4 integers (later A, B, C, D)
});

rl.on('close', () => {
  var data = entry[0].split(' ');
  if (+data[3]<=+data[1]) { //If D<=B then output A
    process.stdout.write(data[0].toString());
  } else { //Else output by formula "A + (D-B)*C"
    process.stdout.write((data[0]+(data[3]-data[1])*data[2]).toString());
  }
});

错误原因

  1. 核心报错原因:entry[0]为undefined,说明close事件触发时,line事件从未执行——程序未读取到任何输入就结束了。
  2. 潜在逻辑问题:代码中未对字符串类型的输入做数值转换,直接执行加法会触发字符串拼接,导致计算结果错误。

修复方案

方案1:读取输入后立即处理(推荐)

在line事件中直接处理输入,完成计算后关闭接口,避免依赖close事件时entry为空的情况:

var readline = require('readline');
 
var rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

rl.on('line', function (data) {    
    // 分割输入字符串并转换为整数
    const [A, B, C, D] = data.split(' ').map(Number);
    let result;
    if (D <= B) {
        result = A;
    } else {
        result = A + (D - B) * C;
    }
    process.stdout.write(result.toString() + '\n');
    // 处理完成后关闭接口
    rl.close();
});

rl.on('close', () => {
    process.exit(0);
});

方案2:增加空值判断(兼容无输入场景)

如果需要保留close事件的处理逻辑,必须先判断输入是否存在,同时修正数值类型问题:

var readline = require('readline');
 
var rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

var entry= [];

rl.on('line', function (data) {    
    entry.push(data);
});

rl.on('close', () => {
    // 先判断是否有有效输入
    if (!entry[0]) {
        process.stdout.write('无有效输入\n');
        return;
    }
    // 分割字符串并转换为数字
    const [A, B, C, D] = entry[0].split(' ').map(Number);
    let result;
    if (D <= B) {
        result = A;
    } else {
        result = A + (D - B) * C;
    }
    process.stdout.write(result.toString() + '\n');
});

内容的提问来源于stack exchange,提问作者К Е

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 17:15:53