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

C#中AskForNumber输入校验函数仅返回首次输入值问题求助

问题根因

你的问题核心是递归调用AskForNumber时没有接收返回值,首次输入的number_string变量不会被后续递归调用的结果覆盖,所以最终永远返回第一次输入的内容。

当校验不通过触发递归时,你只是执行了一遍AskForNumber(numberLength),没有把递归调用返回的正确输入赋值给当前的number_string变量,当前函数栈里的number_string一直存储着第一次输入的无效值,递归结束后还是会返回这个初始值。

修复后的递归版AskForNumber函数代码

static string AskForNumber(int numberLength) {
    Console.WriteLine($"Write number of Length {numberLength}");
    string number_string = Console.ReadLine();

    if (!CheckCondition(numberLength, number_string)) {
        // 接收递归调用返回的合法值,覆盖当前的无效输入
        number_string = AskForNumber(numberLength);
    }
    return number_string;       
}

更推荐的循环实现(避免递归栈溢出风险)

如果用户多次输入错误,递归调用会不断累加函数栈,极端情况会触发栈溢出,用while循环实现更稳妥:

static string AskForNumber(int numberLength) {
    while(true)
    {
        Console.WriteLine($"Write number of Length {numberLength}");
        string number_string = Console.ReadLine();
        if (CheckCondition(numberLength, number_string))
        {
            return number_string;
        }
        // 校验不通过直接循环提示重新输入即可
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:30:02