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

如何在C++中读取文本文件内数值并求和?附代码求助

解决随机数求和的问题

嘿,我帮你看看这个求和的问题~你的代码目前只是把文件里的内容当作字符串读取输出,没有做数值转换和累加操作,所以没法完成求和。咱们一步步来调整:

问题核心分析

  • 你用string array[1000]存储读取的内容,字符串类型没法直接做算术求和,得先转成整数类型
  • 读取流程里只做了输出,没有对每个数值进行累加计算
  • 可以在读取文件的同时完成求和,不需要额外存所有数组(当然如果需要保留数组也可以)

修改后的完整代码

#include <iostream>
#include <cstdlib>
#include <fstream>
#include <string>
#include <sstream> // 用于字符串转数值
using namespace std;

class Array {
public:
    // 修改函数,同时完成输出和求和,返回总和
    int ArrayoutputAndSum() {
        int array[1000]; // 改成int数组存储数值
        int loop = 0;
        string line;
        int total = 0; // 用于累加总和的变量
        ifstream myfile("Asg4.txt");
        if (myfile.is_open()) {
            // 注意:不要用eof()作为循环条件,会多读一次空行
            while (getline(myfile, line)) {
                // 将字符串转成整数
                stringstream ss(line);
                ss >> array[loop];
                
                cout << array[loop] << endl;
                total += array[loop]; // 累加每个随机数到总和
                loop++;
            }
            myfile.close();
            cout << "\n所有随机数的总和是:" << total << endl;
        } else {
            cout << "Unable to open file";
            return -1;
        }
        return total;
    }
};

int main() {
    Array Array1;
    ofstream myfile;
    myfile.open("Asg4.txt");
    // 加随机种子,让每次生成的随机数不一样(原代码每次运行生成相同序列)
    srand(time(0));
    for (int i = 0; i < 1000; i++) {
        myfile << 1 + (rand() % 1000) << endl;
    }
    myfile.close();
    
    // 调用包含求和逻辑的函数
    Array1.ArrayoutputAndSum();
    return 0;
}

关键改动说明

  • 将存储数组的类型从string改为int,直接存储数值类型,方便后续求和计算
  • 引入<sstream>头文件,使用stringstream将读取的字符串行转换为整数
  • 新增total变量,在读取每个数值时进行累加,实现求和逻辑
  • 优化循环条件:用while (getline(myfile, line))替代!myfile.eof(),避免因文件末尾空行导致的读取错误
  • 添加srand(time(0))初始化随机数种子,让每次运行生成的随机数序列唯一(原代码默认种子固定,每次生成相同的随机数)

这样修改后,程序就能在输出所有随机数的同时,计算并输出它们的总和啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:50:26