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

基于Node.js的TypeScript猜数字游戏交互问题排查

TypeScript终端猜数字游戏问题修复

问题根源

  • 循环条件完全错误:初始guessCount是10,while(guessCount > 10)永远不成立,循环根本没执行
  • 错误关闭输入接口:每次猜不对就调用readLineInterface.close(),直接终止了输入通道,自然没法继续接收下一次猜测
  • 单次提问逻辑:只调用了一次question方法,没实现重复提问的逻辑——readline是异步的,同步while循环根本等不到用户输入

修复后的代码

const readline = require('readline');

// 剩余尝试次数
let guessCount = 10;
// 生成1-100的随机数
const randomNumber = Math.floor(Math.random() * 100) + 1;
console.log(randomNumber); // 调试用,正式发布可删掉

console.log("Can you guess my number?");

const readLineInterface = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

// 递归实现重复提问
function askGuess() {
    // 次数用完直接结束游戏
    if (guessCount <= 0) {
        console.log(`Game over! The number was ${randomNumber}`);
        readLineInterface.close();
        return;
    }

    readLineInterface.question(`Between 1 - 100 (${guessCount} attempts left): `, (status: string) => {
        const guess = Number(status);
        // 校验输入合法性
        if (isNaN(guess) || guess < 1 || guess > 100) {
            console.log("Please enter a valid number between 1 and 100!\n");
            askGuess();
            return;
        }

        if (guess === randomNumber) {
            console.log("You win!");
            readLineInterface.close();
            process.exit(0);
        } else if (guess < randomNumber) {
            guessCount -= 1;
            console.log("Too small! Try again.\n");
            askGuess();
        } else {
            guessCount -= 1;
            console.log("Too big! Try again.\n");
            askGuess();
        }
    });
}

// 启动第一次提问
askGuess();

修复要点

  • 用递归函数askGuess()适配readline的异步特性,实现重复提问
  • 修正结束条件:判断剩余次数是否大于0,次数耗尽直接结束游戏
  • 移除错误的close()调用,只在胜利或游戏结束时关闭输入接口
  • 增加输入合法性校验,避免用户输入无效内容导致逻辑异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 19:50:38