从文本文件读取到矢量中

Read from a text file into a vector

本文关键字:读取 文本 文件      更新时间:2023-10-16

我很难理解为什么我的代码不起作用。问题在于,当我将文本文件中的值传递到等级变量中时。我不明白为什么这是错误的。除此之外,我的代码中的其他一切都很好,但我还是包含了所有内容。

string fileName;
cout << "Program that takes data from file and calculatenmean and standard deviation and put it in file out.txtn";
cout << "Enter the input file name ";
cin  >> fileName;
  double grade;
ifstream inData;
inData.open(fileName.c_str());
//  Declare vector<double> vecx
vector<double> vecx;
//  read data from input file to vector vecx,
while(inData >> grade)
{
    vecx.push_back(grade);
}

inData.close(); 
//  keep track how many elements you read from file
//  When you done with reading from file, close stream inData

这是完整的代码,以防你感兴趣。

#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>
using namespace std;
int main()
{
    string fileName;
    cout << "Program that takes data from file and calculatenmean and standard deviation and put it in file out.txtn";
    cout << "Enter the input file name ";
    cin  >> fileName;
      double grade;
    ifstream inData;
    inData.open(fileName.c_str());
    //  Declare vector<double> vecx
    vector<double> vecx;
    //  read data from input file to vector vecx,
    while(inData >> grade)
    {
        vecx.push_back(grade);
    }

    inData.close(); 
    //  keep track how many elements you read from file
    //  When you done with reading from file, close stream inData
    // read element by element  in vector vecx  and calculate sum;
    double sum=0;
    double average;
    for (int i=0; i < vecx.size(); i++)
        sum=sum+vecx[i];
    average=sum/(vecx.size());
    // sum divide by number of elements to find mean(average)
    //again read element by element and calculate
    //square of difference between element and mean
    //calculate sum of squares of differences
    //divide by number of elements and
    //take square root - you got the standard deviation
    sum=0;
    double variance, stdev;
    for (int i=0; i < vecx.size(); i++)
        sum=sum+(vecx[i]-average*vecx[i]-average);
    variance=sum/(vecx.size());
    stdev=sqrt(variance);
    //open output stream
    ofstream outData;
    outData.open("out.txt");
    //output  mean and standard deviation
    cout << "Average is " << average << endl;
    cout << "Standard deviation is " << stdev << endl;
    //close stream
    outData.close();
}

我觉得自己像个白痴,因为我不明白为什么这不起作用。。。我应该能够弄清楚,但我没有。

C++遵循先例的正常数学顺序。

此行:

sum=sum+(vecx[i]-average*vecx[i]-average);

看起来不正确。乘法发生在减法之前,所以它是这样计算的:

sum=sum+((vecx[i]-(average*vecx[i]))-average);

但大概你的意思是:

sum=sum+((vecx[i]-average)*(vecx[i]-average));

您可能有兴趣查看优先顺序的完整列表。

您永远不会将数据写入文件。使用ofstream outData而不是std::cout。否则,您只会将输出发送到控制台。

//open output stream
ofstream outData;
outData.open("out.txt");
//output  mean and standard deviation
outData << "Average is " << average << endl;
outData << "Standard deviation is " << stdev << endl;
//close stream
outData.close();