gpt4 book ai didi

c++ - 如何从 text.doc 计算数字的总和和平均值

转载 作者:行者123 更新时间:2023-11-28 07:19:14 24 4
gpt4 key购买 nike

我被要求编写一个程序来打开一个 txt.doc 并找到:列表中数字的数量、总和和平均值。通过我编译代码,我的阀门等于零。我找不到我哪里出错了。

#include <cstdlib>
#include <cmath>
#include <iomanip>
#include <fstream>

using namespace std;

int main()
{
ifstream inputFile;
string filename;
int valve;
int aNumber = 0;
int numbers = 0;
double sum = 0.0;
double average = 0.0;

// get file from user
cout << "enter the filename\n";
cin >> filename;
cout << "_________________________________________\n";
// open file
inputFile.open(filename.c_str());

// if loop(if the file successfully opened, process it.)

if (inputFile)
{
while (inputFile >> valve)
{
cout << valve << endl;
}
}
else
{
//display an error message
cout << "Error opening the file\n";
}

cout << "\n";

while (inputFile >> aNumber)
{
numbers++;
sum += aNumber;
}

if (numbers > 0)
average = sum / numbers;
else
average = 0.0;

cout << "Number of numbers: " << numbers << "\n";
cout << "Sum is: " << sum << "\n";
cout << "Average is: " << average;


inputFile.close();
return 0;
}

我不知道为什么我的“数字”“总和”“平均”= 零。

最佳答案

您的代码的问题在于您尝试多次读取同一个文件而没有将其从末尾取出:一旦流转换为 false 它将保持此状态,直到流状态为清除并忽略任何实际文件操作。此外,即使您 clear() 文件的状态,当尝试读取数据时它也会立即返回失败状态,因为下一个值格式错误或到达流的末尾。不过,您可以 clear() 状态和 seekg() 到文件的开头(虽然我不是 推荐这种方法):

while (inputFile >> value) {
...
}
inputFile.clear(); // clear any state flags
inputFile.seekg(0, std::ios_base::beg);

读取文件通常是相当昂贵的,更不用说某些"file"的来源不能多次读取(例如,命名管道看起来像文件但只能读取一次)。成本来自访问物理媒体的需要和程序内部转换(如果访问速度很快)。因此,您最好只读取文件一次,并在同一遍中完成所有相关计算。如果认为组合这些操作不合理,您可能希望将内容加载到容器中,然后在容器上进行操作:

std::vector<double> values{ std::istream_iterator<double>(inputFile),
std::istream_iterator<double>() };
// now use values

如果您认为文件很大:在这种情况下,您实际上不想多次读取文件,也不想将它存储在容器中,即,您将一次性处理该文件。对于手头的任务来说,这样做是相当微不足道的,当然也是非常可行的。

关于c++ - 如何从 text.doc 计算数字的总和和平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19756753/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com