如何从文本文件中提取每一行并取平均值?

时间:2019-01-17 03:32:37

标签: c++ ifstream

我有一个必须阅读文本文件的问题。取每一行数字,取平均数字,然后将这些数字推到向量上。

70 79 72 78 71 73 68 74 75 70

78 89 96 91 94 95 92 88 95 92

83 81 93 85 84 79 78 90 88 79

这只是一部分文件。我不知道如何将所有内容放进去,我确定这是没有必要的。

我已成功打开文件。我在网上到处到处都有关于如何阅读每一行并尝试平均数字的方法。但是,我总是以失败告终。我是C ++的初学者,非常抱歉,我不了解很多。

我如何从文件中取出每一行并将其平均以将其推到矢量上?

int main() {
    string inFileName = "lab1.txt";
    ifstream inFile;
    vector<string> scores;
    string myLine2;
    openFile(inFile, inFileName);
    getAvgofContents(inFile, myLine2);
}

void openFile(ifstream &file, string name){
    file.open(name);

    while (!file.is_open()) {
        cout << "Unable to open default file/file path.\nPlease enter a new file/file path:" << endl;
        cin >> name;
        file.open(name);
    }
    cout << "FILE IS OPEN!!!\n";
}

void getAvgofContents(ifstream &file, string line){
    while (file){
        getline(file, line);
        cout << line << endl;
    }
}

I am supposed to get results like:
73
81.5
84.1
...
...
Then after averaging each line, push the results to a vector.

1 个答案:

答案 0 :(得分:1)

这可能有帮助:

float getAvgOfLine(string line) {
  float total = 0;
  int count = 0;
  stringstream stream(line);
  while(1) {
   int n;
   stream >> n;
   if(!stream)
      break;
   total += n;
   count++;
  }
  if (count == 0) {
     // the line has no number
     return 0;
  }
  return total/count;
}

float getAvgofContents(ifstream &file, string line){
    float total;
    int number;
    while (getline(file, line)){
        cout << getAvgOfLine(line)<< endl;
    }
}

参考:Convert String containing several numbers into integers