C#实现单次猜测猜数字游戏 代码逻辑错误排查求助
C# 单次猜数字游戏问题修复
代码问题汇总
- 语法错误:
else (guess > 10)不符合C#语法规则,else后不能直接接判断条件,需要配合if关键字使用。 - 分支顺序错误:「猜大了」「猜小了」的判断放在「答案接近」判断之前,所有非正确猜测都会先命中大小判断分支,导致接近答案的提示永远无法触发。
- 参数不匹配:提示文本要求用户猜1-100范围的数字,但随机数生成调用
rd.Next(1, 10)只会生成1-9的整数,范围校验阈值也写为10,和提示完全不符。 - 逻辑冗余:当前代码没有编写任何循环结构,本身就只会执行一次输入读取、结果判断流程,不需要用
break终止——break仅能跳出循环或switch结构,无循环时使用没有任何效果。要实现单次猜测后结束的需求,只需要在所有判断逻辑末尾加一行结束提示,代码执行完会自动退出。 - 额外冗余:随机数定义后多了一层无意义的独立大括号,不影响运行但属于多余写法。
修复后可直接运行代码
Console.WriteLine("gissa talet\nDu ska nu gissa ett tal mellan 1 och 100, så varsågod..\nskriv in ett tal"); var str = Console.ReadLine(); int guess = Convert.ToInt32(str); // 生成1-100范围随机数,Next方法上界为排他值,传101才能覆盖到100 Random rd = new Random(); int rand_num = rd.Next(1, 101); // 优先校验输入范围 if (guess < 1 || guess > 100) { Console.WriteLine("Du måste skriva in ett tal mellan 1 och 100!"); } else { if (guess == rand_num) { Console.WriteLine("Ditt Tal är rätt. grattis!"); } else { // 先触发接近提示 if (Math.Abs(guess - rand_num) <= 3) { Console.WriteLine("Du är dock nära och det bränns"); } // 再提示大小关系 if (guess < rand_num) { Console.WriteLine("Ditt tal är för litet. gissa på ett större tal"); } else { Console.WriteLine("Ditt tal är för stort. gissa på ett mindre tal"); } } } // 输出结束提示,程序执行完毕自动终止 Console.WriteLine("the end");
注:当前代码直接用
Convert.ToInt32转换输入,如果用户输入非数字内容会抛出异常,初学阶段可以后续再补充输入校验逻辑。
内容的提问来源于stack exchange,提问作者Kent Karlsson
相关产品推荐
相关产品推荐

