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

