C#使用while循环计算用户输入所有数字平均值问题求助
你的代码存在以下几处核心问题:
- 循环条件逻辑错误:当前用
||(或)连接判断条件,无论用户输入任何值都会满足循环条件,永远不会退出循环。比如用户输入Yes时,enter!="yes"的判断结果仍为真,循环会继续执行。这里应该改用&&(与)连接,或是简化为将输入统一转小写后判断是否为结束标识,逻辑更简洁。 - 数值累加逻辑完全错误:你在循环内每次执行
sum = decimal.Parse(enter)会直接覆盖之前的累加结果,后续sum += counter是把计数变量加到总和里,完全不符合需求。且直接调用decimal.Parse遇到非数字输入会直接抛出异常,不符合“忽略非数字输入”的要求,应该用decimal.TryParse做安全校验。 - 有效输入判断逻辑缺失:你只在进入循环前判断了第一次输入是否为有效数字,循环内的所有输入都没有做有效性校验,也没有统计有效输入的数量。
- 除零异常风险:如果用户没有输入任何有效数字,
counter值为0,执行sum / counter会直接抛出除以零的异常。 - 输出内容不符:你最终输出字符串标注是“数字总和”但实际传入的是平均值,和需求不符。
修正后的完整可运行代码如下:
Console.WriteLine("Please enter any numbers, then type Yes to continue."); string enter = Console.ReadLine(); int counter = 0; decimal sum = 0; // 循环判断:输入不是结束标识时继续处理 while (enter.ToLower() is not "yes" and not "y") { // 校验当前输入是否为有效数字,是才累加计数 if (decimal.TryParse(enter, out decimal currentNum)) { sum += currentNum; counter++; } // 提示下一次输入 Console.WriteLine("Please enter any numbers, then type Yes to continue"); enter = Console.ReadLine(); } // 输出逻辑 string msg = counter > 0 ? $"The average of your numbers is {sum / counter}" : "you didn't enter any numbers"; Console.WriteLine(msg);
内容的提问来源于stack exchange,提问作者user17138068
相关产品推荐
相关产品推荐

