C#中计算正数平均值时while循环偶发失效问题求助
问题排查与修复
你的代码存在以下几个关键问题:
- 负数输入处理逻辑漏洞:当输入负数时,代码会额外读取一次输入,但这个新输入不会经过正数判断——如果新输入是正数,它不会被计入总和或计数;如果还是负数,会直接回到循环开头,导致重复提示且该负数未被正确跳过。
- 除以零风险:如果直接输入0结束程序,此时
count为0,执行除法会触发DivideByZeroException。 - 未处理无效输入:使用
int.Parse时,若输入非整数内容(如字母、小数),程序会直接崩溃。 - 冗余代码:计算平均值时
sum += input完全多余(此时input是0),易造成逻辑误解。
修复后的代码:
double count = 0; int sum = 0; int input; do { Console.Write("Enter a number: "); // 处理非整数的无效输入 while (!int.TryParse(Console.ReadLine(), out input)) { Console.WriteLine("Invalid input, please enter an integer."); Console.Write("Enter a number: "); } if (input > 0) { sum += input; count++; } else if (input < 0) { Console.WriteLine("Negative numbers are not allowed, please enter a positive number or 0 to exit."); } // 输入0时循环自动结束 } while (input != 0); // 避免除以零,同时处理无正数输入的情况 if (count > 0) { double average = sum / count; Console.WriteLine($"Average of all positive numbers is: {average:0.00}"); } else { Console.WriteLine("No positive numbers were entered."); }
关键修改说明:
- 改用
do-while循环:无需初始化input为-1,确保至少执行一次输入提示。 - 用
int.TryParse替代int.Parse:捕获无效输入,提示用户重新输入,避免程序崩溃。 - 简化负数处理:输入负数时仅提示错误,回到循环开头重新输入,确保所有输入都经过统一判断逻辑。
- 增加除以零检查:当无正数输入时给出友好提示,而非抛出异常。
- 移除冗余操作:直接用sum计算平均值,逻辑更清晰。
内容的提问来源于stack exchange,提问作者NOOIT
相关产品推荐
相关产品推荐

