如何在C#宠物养成项目中检测用户输入字符串是否为float类型数值
解决方案
你可以通过C#的float.TryParse()方法实现输入类型校验,该方法无需捕获异常即可判断用户输入是否可转换为float类型,修改后的完整代码如下:
// 宠物喂养功能 static void FeedPet(ref float PetWeight, List<string> FeedList, List<string> ExoList, ref string PetName) { bool repeat = true; while (repeat) { PetWeight = (float)Math.Round(PetWeight, 2); Console.WriteLine("|=-=-=-=-=| 喂养 |=-=-=-=-=|"); Console.Write($"请输入你想要喂给{PetName}的零食数量:"); // 读取用户输入并校验格式 string input = Console.ReadLine(); float FoodAmount; // 校验输入是否为有效float if (!float.TryParse(input, out FoodAmount)) { Console.WriteLine("请输入数字"); continue; } float GainedWeight = (float)(FoodAmount * 0.02f); if (FoodAmount == 0) { Console.WriteLine($"{PetName}今天没有吃到零食"); Console.WriteLine($"{PetName}当前体重为{PetWeight}kg"); repeat = false; } else if (FoodAmount >= 1 && FoodAmount <= 5) { // 计算宠物新体重 PetWeight = FoodAmount * 0.2f + PetWeight; // 告知用户宠物增重数值 Console.WriteLine($"{PetName}增重了{GainedWeight}kg"); // 记录喂养信息到列表 FeedList.Add($"{PetName}吃了{FoodAmount}份零食,增重{GainedWeight}kg"); // 输出当前体重 Console.WriteLine($"当前体重为:{PetWeight}kg"); repeat = false; } else { Console.WriteLine($"{PetName}一次最多只能吃5份零食,请输入0-5之间的数字"); } } }
核心修改点
- 将原代码中直接使用
float.Parse()转换输入的逻辑替换为float.TryParse()校验,转换失败时直接输出「请输入数字」提示并重新进入输入流程 - 修复了原代码的分支逻辑缺陷:原代码中输入0时,执行完第一个if分支后仍会触发后续else分支的范围提示,改为
else if结构后避免了该问题 - 补充了
Math.Round()的返回值赋值:原代码中Math.Round(PetWeight, 2)执行后没有将结果赋值回PetWeight,不会生效,修改后可正常保留两位小数
内容的提问来源于stack exchange,提问作者Laytonhuz
相关产品推荐
相关产品推荐

