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

C# while循环处理用户无效输入时运行逻辑不符合预期问题求助

问题原因
  • 没有为是否继续游戏的输入添加循环校验逻辑:当前代码仅在用户第一次输入非法值时提示重输一次,未对第二次输入的内容做合法性校验就直接执行continue回到外层游戏循环,若第二次输入的内容是Y就会直接开启新一局游戏,完全跳过了校验步骤。
  • 非法输入判断条件存在逻辑错误:answer != "Y" || answer != "N"是恒成立的表达式(任意值不可能同时等于Y和N),虽然当前因为前面已经判断了Y和N的合法情况,走到该分支的必然是非法输入,但该写法本身不严谨,正确的非法输入判断应为answer != "Y" && answer != "N"。
  • 额外的代码问题:random.Next(1, 2)的取值范围是左闭右开区间,实际永远只能返回1,导致猜数字答案固定失去游戏意义;且Random对象放在外层循环内重复创建,若循环间隔极短会生成重复的随机数,建议移到循环外初始化。
修正后的代码
using System;

namespace first {
    class Program {
        static void Main(string[] args) {
            Console.WriteLine("Hi! What is your name");
            string userName = Console.ReadLine();
            Console.WriteLine("oh! you are:" + userName);
            Console.WriteLine("let play a game");

            // Random移到循环外初始化
            Random random = new Random();
            string answer="Y";
            while (answer == "Y") {
                // 随机数范围改为1-10,可按需调整,上界为开区间所以写11
                int correntNumber = random.Next(1, 11);
                int guess = 0;

                Console.WriteLine("Guess a number between 1 and 10");
                while (guess != correntNumber) {
                    string userGuess = Console.ReadLine();

                    // 推荐用TryParse避免抛出异常
                    if(!int.TryParse(userGuess, out guess)) {
                        Console.WriteLine("invalid input, please enter a number");
                        // 输入非法时直接提示重输,不执行后面的猜数判断
                        continue;
                    }

                    if (guess != correntNumber) {
                        Console.WriteLine("try again!");
                    }
                }

                Console.WriteLine("Yes! correct");
                // 循环校验是否继续的输入
                while (true)
                {
                    Console.WriteLine("Play again? (Y/N)");
                    answer = Console.ReadLine().ToUpper();
                    if (answer == "Y" || answer == "N")
                    {
                        break;
                    }
                    Console.WriteLine("please enter Y or N");
                }
                if(answer == "N")
                {
                    Console.WriteLine("bye");
                    return;
                }
            }
        }
    }
}
核心修改说明
  • 新增了是否继续输入的循环校验逻辑,只要用户输入不是Y/N就反复提示,直到拿到合法输入再继续后续流程,不会出现跳过校验直接开新局的问题。
  • 优化了猜数字环节的输入校验逻辑,输入非数字时直接提示重输,不会输出多余的“try again”提示。
  • 调整了随机数生成的逻辑,修复了答案固定的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 19:45:05