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
相关产品推荐
相关产品推荐

