从文件读取数值计算平均、最大、最小值的C++代码无法运行求指导
问题修正方案
现有代码问题
- 你注释的统计逻辑写在文件读取流程之前,此时
nums容器为空,无法读取到任何数据完成计算 - 读取变量
input是double类型,存储容器用的是vector<int>,如果读取的数值包含小数会自动截断丢失精度 - 没有做空容器判断,直接调用
nums.size()做除法可能会触发除以0崩溃,也没有判断文件是否成功打开
完整可运行代码
#include <fstream> #include <vector> #include <iostream> #include <numeric> #include <algorithm> using namespace std; int main() { fstream my_file("values.txt"); // 如果需要保留小数精度,把vector<int>改为vector<double>即可 vector<int> nums; double input; // 先判断文件是否成功打开 if (!my_file.is_open()) { cout << "文件打开失败,请检查values.txt路径是否正确" << endl; return 1; } while (my_file >> input) { nums.push_back(input); } my_file.close(); // 空容器判断 if (nums.empty()) { cout << "文件中没有读取到有效数值" << endl; return 1; } // 统计计算 int max_value = *max_element(nums.begin(), nums.end()); int min_value = *min_element(nums.begin(), nums.end()); // 累加初始值用0.0保证按浮点数运算 double average_value = accumulate(nums.begin(), nums.end(), 0.0) / nums.size(); // 输出结果 cout << "读取到的所有数值:" << endl; for(int num : nums){ cout << num << " "; } cout << endl << "最大值:" << max_value << endl; cout << "最小值:" << min_value << endl; cout << "平均值:" << average_value << endl; return 0; }
逻辑说明
max_element和min_element是<algorithm>头文件提供的标准库方法,返回对应极值的迭代器,加*即可拿到对应数值accumulate是<numeric>头文件提供的累加方法,初始值设为0.0是为了让累加结果为浮点数,避免整数除法丢失小数部分- 增加了文件打开判断、空容器判断,避免运行时异常
内容的提问来源于stack exchange,提问作者Amiu
相关产品推荐
相关产品推荐

