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

从文件读取数值计算平均、最大、最小值的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 18:06:04