Chromebook上用.NET Fiddle运行C#猜数字游戏目标值和提示异常如何解决
问题原因分析
你提供的代码本身逻辑中,目标随机数仅在程序启动时生成1次,运行过程中不会主动变更,你遇到的数字变动、提示异常的情况大概率是以下原因导致的:
- 每次重新运行.NET Fiddle项目时,程序都会重新生成新的随机数,属于正常的运行逻辑
- 输入非整数内容时,
Convert.ToInt32(feedback)会抛出异常导致程序终止,重新启动后就会生成新的随机数,看起来就像目标数字变了 - 提示同步变化属于正常逻辑:比如你第一次猜50提示“更低”,第二次猜30提示“更高”,说明目标数字落在30-50之间,不是提示逻辑有问题
代码优化建议
- 替换goto语句:goto会大幅降低代码可读性,推荐用
do-while或while循环实现重复猜测的逻辑 - 增加输入合法性校验:使用
int.TryParse()替代Convert.ToInt32()处理用户输入,遇到非整数内容时提示用户重新输入,避免程序崩溃 - 修正逻辑和拼写错误:当前随机数生成范围是0-100,和提示的“1到100”不一致,可以改成
random.Next(1, 101)生成1-100的整数;另外失败提示里的“nubmer”拼写错误,修正为“number” - 优化字符串写法:用C#的字符串插值替代加号拼接字符串,代码可读性更高
优化后参考代码
using System; public class Program { public static void Main() { var random = new Random(); // 生成1-100的随机数,和提示保持一致 int targetNum = random.Next(1, 101); int tries = 5; Console.WriteLine("我想了一个1到100之间的数字,你有5次机会猜对它。"); while (tries > 0) { string input = Console.ReadLine(); // 校验输入是否为合法整数 if (!int.TryParse(input, out int guess)) { Console.WriteLine("请输入合法的整数,请重新猜:"); continue; } if (guess == targetNum) { Console.WriteLine($"恭喜你猜对了!还剩{tries}次机会。"); return; } else if (guess > targetNum) { tries--; Console.WriteLine(tries > 0 ? $"猜大了,你还有{tries}次机会。" : $"猜大了,机会用完了。正确数字是{targetNum}。"); } else { tries--; Console.WriteLine(tries > 0 ? $"猜小了,你还有{tries}次机会。" : $"猜小了,机会用完了。正确数字是{targetNum}。"); } } } }
内容的提问来源于stack exchange,提问作者osyt
相关产品推荐
相关产品推荐

