C++程序问题:输入正浮点数,输入负整数时输出平均值
问题分析与修复
你的代码存在几个关键逻辑问题,导致不符合预期:
- 多余的for循环:这个for循环完全没必要,里面的
break让它每次只执行一次,还把计数变量i局限在循环内部,没法累计有效输入的次数。 - 未过滤负数就累加:不管输入是正还是负,直接加到
total里,导致负数被错误计入总和。 - 提前输出平均值:每次输入后就立刻计算并输出平均值,不符合“输入负数后才输出最终结果”的需求。
- 计数逻辑失效:
i每次都被重新初始化为1,根本没法统计有效输入的数量。
修复后的代码
#include <iostream> using namespace std; int main() { float total = 0.0f; int count = 0; float input; do { cout << "Please input a number: "; cin >> input; // 只处理正浮点数 if (input > 0) { total += input; count++; } } while (input >= 0); // 输入负数时退出循环 // 避免除以0的情况(比如一开始就输入负数) if (count > 0) { float av_number = total / count; cout << "Average of positive numbers: " << av_number << endl; } else { cout << "No positive numbers entered." << endl; } return 0; }
关键修正点
- 移除了冗余的for循环,改用
count变量统计有效输入的正浮点数数量,作用域在main函数内,能持续累计。 - 增加了输入判断:只有当输入的数大于0时,才累加到总和并增加计数,彻底排除负数的干扰。
- 调整输出时机:只在退出循环(输入负数)后,才计算并输出最终平均值,同时增加了空输入(无正数)的处理,避免除以0的运行时错误。
- 简化了累加表达式:
total += input比total = total += input更简洁且逻辑清晰。
内容的提问来源于stack exchange,提问作者Beetle_Soft
相关产品推荐
相关产品推荐

