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

JS条件判断为false仍执行,prompt-sync输入0未自动启动游戏问题

问题原因
  • 输入提示的执行顺序逻辑错误:第四、第五位玩家的prompt()调用写在了start状态判断之前,哪怕你在输入第三位玩家时输入0把start设为true,代码还是会先执行后续的prompt()语句弹出输入框,之后才会判断start的状态,所以提前启动的逻辑不会生效。
  • 循环条件语法错误:最后的while (start = true)是赋值操作,不是相等判断,执行时会强制把start设为true,导致循环永久运行无法退出。
  • 类型判断不严谨:prompt-sync返回的所有输入都是字符串类型,直接用cmd != 0做弱类型比较存在隐式转换的风险,容易出现预期外的匹配结果。
修复方案

调整输入逻辑的执行顺序,只有当start未激活时才弹出后续玩家的输入提示,同时修正循环条件和类型判断,修复后代码如下:

const prompt = require("prompt-sync")({ sigint: true });
let cmd;
let start = false; // 初始化用布尔值更符合语义
const stats = {
    player1: {
        name: "",
        money: 0,
        properties: [],
        position: 0,
    },
    player2: {
        name: "",
        money: 0,
        properties: [],
        position: 0,
    },
    player3: {
        name: "",
        money: 0,
        properties: [],
        position: 0,
    },
    player4: {
        name: "",
        money: 0,
        properties: [],
        position: 0,
    },
    player5: {
        name: "",
        money: 0,
        properties: [],
        position: 0,
    }
}

cmd = prompt("支持最多5名玩家,输入第一位玩家的名称:")
stats.player1.name = cmd;
cmd = prompt("输入第二位玩家的名称:")
stats.player2.name = cmd;

cmd = prompt("输入第三位玩家的名称,输入0直接开始游戏:")
if (cmd !== '0') {
    stats.player3.name = cmd;
} else {
    start = true;
}

// 仅未启动游戏时才弹出后续玩家的输入提示
if (!start) {
    cmd = prompt("输入第四位玩家的名称,输入0直接开始游戏:")
    if (cmd !== '0') {
        stats.player4.name = cmd;
    } else {
        start = true;
    }
}

if (!start) {
    cmd = prompt("输入第五位玩家的名称,输入0直接开始游戏:")
    if (cmd !== '0') {
        stats.player5.name = cmd;
    } else {
        start = true;
    }
}

// 修正循环条件为严格相等判断,可自行补充命令逻辑终止循环
while (start === true) {
    cmd = prompt("输入指令:")
    // 示例:输入exit即可退出循环
    if (cmd === 'exit') {
        start = false
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 18:03:03