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

Visual Studio下C语言求平均值程序故障求助:无法终止、重复提示

程序错误分析与修复:持续输入实数计算平均值

问题回顾

编写程序持续输入实数值并计算平均值,输入负数时终止,但遇到两个问题:

  • 输入负数后程序无法终止
  • printf提示语句重复执行3次

错误原因

1. 格式符错误(核心问题)

代码中scanf_s("%1f", &input);使用了数字1的%1f,而double类型变量对应的格式控制符应该是小写字母l的%lf。这个错误导致scanf_s无法正确读取输入的数值,input始终保持初始值0.0,循环条件input >= 0.0永远成立,程序无法终止;同时输入缓冲区的内容未被正确处理,引发printf重复执行。

2. 循环逻辑顺序错误

当前循环先将input累加到total,再执行输入操作,第一次循环会把初始的0.0计入总和,导致最终平均值计算偏差。

修正后的代码

#include <stdio.h>

int main(void)
{
    double total = 0.0;
    double input = 0.0;
    int num = 0;

    // 先读取第一个输入
    printf("real number(minus to quit):");
    scanf_s("%lf", &input);
    
    while (input >= 0.0)
    {
        total += input;
        num++;
        // 读取下一个输入
        printf("real number(minus to quit):");
        scanf_s("%lf", &input);
    }

    // 避免除以0的情况
    if (num > 0)
    {
        printf("average:%f \n", total / num);
    }
    else
    {
        printf("No valid positive numbers entered.\n");
    }
    return 0;
}

修正说明

  • 将scanf_s的格式符改为%lf,确保正确读取double类型输入
  • 调整流程:先读取输入再判断是否计入总和,避免初始0值干扰计算
  • 增加边界判断:当未输入任何有效正数时,输出提示信息,避免除以0的运行时错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 15:05:23