You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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.");
}

关键修改说明:

  1. 改用do-while循环:无需初始化input为-1,确保至少执行一次输入提示。
  2. 用int.TryParse替代int.Parse:捕获无效输入,提示用户重新输入,避免程序崩溃。
  3. 简化负数处理:输入负数时仅提示错误,回到循环开头重新输入,确保所有输入都经过统一判断逻辑。
  4. 增加除以零检查:当无正数输入时给出友好提示,而非抛出异常。
  5. 移除冗余操作:直接用sum计算平均值,逻辑更清晰。

内容的提问来源于stack exchange,提问作者NOOIT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 07:50:28