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
相关产品推荐
相关产品推荐

