C++ 读取文件,然后创建一个动态数组

C++ 读取文件,然后创建一个动态数组,c++,C++,我试图得到所有数字的总和和平均值。 我没有得到任何错误或正确的输出。 谢谢你的帮助 #include <iostream> #include <fstream> #include <string> #include <iomanip> using namespace std; int main(){ double temp; double total = 0.0; double avg; in

我试图得到所有数字的总和和平均值。 我没有得到任何错误或正确的输出。 谢谢你的帮助

 #include <iostream>

 #include <fstream>

 #include <string>

 #include <iomanip>

 using namespace std;

 int main(){

    double temp;
    double total = 0.0;
    double avg;
    int counter = 0;

    ifstream file("dataFile.txt");
    while (file >> temp)
    {
    cout << temp << " " << endl;;
    ++counter;
    }
    cout << "Total number of elements: " << counter << endl;
    file.close();
    file.open("dataFile.txt");

    double *num = new double[counter]();

    for (int i = 0; i < counter; i++) {
    cin >> num[i];
    }
    for (int i = 0; i < counter; i++) {
    total += num[i];
    }
    avg = total / counter;

    cout << "\n\nTotal: " << total << endl;
    cout << "Average: " << avg << endl;
    delete[] num;
    num = 0;
    return 0;
}
#包括
#包括
#包括
#包括
使用名称空间std;
int main(){
双温;
双倍合计=0.0;
双平均值;
int计数器=0;
ifstream文件(“dataFile.txt”);
while(文件>>temp)
{

cout我认为您的问题是,您迭代了整个文件以获得输入的大小,但重新打开文件时,您在文件中的位置仍然在末尾。请在重新打开之前检查并使其返回到开头。

相关问题:如果您只想得到平均值,为什么要使用数组?只要继续拉取值就可以了直到文件在碰撞计数器时耗尽,除以计数,这是您的平均值。不需要数组。一个循环而不是三个循环。更相关的是:您如何知道您的文件甚至已成功打开。您从未检查过。我假设此分配使用动态数组。第一个循环是确保文件成功打开,而不是必需。使用
std::vector
而不是直接使用
new[]
。然后,您只需要一个循环,在从文件读取值时将值推回()
到向量中,然后您可以通过向量循环求和(或使用
std::accumulate()
而不使用循环),并将其除以向量的
大小()
以获得平均值。但无论如何,在填充分配的数组时,为什么您要从
std::cin
而不是
文件中读取值?@RemyLebeau非常感谢您。我只是将cin>>num[i]更改为file>>num[i],效果很好。“您重新打开文件时在文件中的位置仍然在末尾。”-这不是
open()
的工作方式。除非您指定
std::ios\u base::ate
标志,否则它总是重置回开头,而此代码不是。