2016-12-19 311 views
-3

我被要求計算10名學生的平均分數。 首先,我能夠從data.txt中文件看起來像這樣讀出和檢索數據:如何計算平均值?

編號名稱測試1的Test2 Test3的

1艾哈邁德58 97 83

2 Dollah 78 76 70

3拉梅什85 75 84

4 Maimunah 87 45 74

5羅伯特74 68 97

6庫馬爾77 73 45

7安順56 23 27

8平74 58 18

9 Idayu 47 98 95

10羅斯蘭79 98 78

然後我必須計算平均每個學生並確定成績。

這是我到目前爲止所做的。

#include <iostream> 
#include <fstream> 
#include <cstdlib> 
#include <string> 

using namespace std; 

int main() 

{ 
    ifstream inFile1; 
    string temp; 
    int line=0; 

    inFile1.open("data.txt"); 
    if(inFile1.fail()) 
    { 
     cout << "File cannot be opened" << endl; 
     exit(1); 
    } 

    while(getline(inFile1, temp)) 
    { 
     line++; 
    } 
    inFile1.close(); 

    return 0; 
} 

這個程序應該至少包含兩個原型函數:average()和grade()。 這是我卡住的地方。

+0

請不要張貼鏈接到包含代碼,複製/粘貼代碼圖像直接到你的問題使用代碼示例工具。 – Holt

回答

1

你可以在這裏查看答案:find average salaries from file in c++

基本上,當你遍歷文件行時,你應該將temp字符串分割成你感興趣的令牌。一個選項是使用getline與分隔符' '或查看std::noskipws流操縱器或僅使用operator>>從文件讀取 - 取決於您的要求的細節。

如果我正確理解你的情況,我會使用operator>>來獲取學生的姓名,然後使用getline(inFile, gradesText)來閱讀,直到閱讀結束,以獲得當前學生的所有成績。

然後,我會使用一個單獨的函數將字符串拆分成一個等級向量。如何進行拆分,您可以在Split a string in C++?中查看。這樣你可以準備一個像vector<int> split(const string& line, char delim = ' ')這樣的功能。在實現中,您應該使用std::stoi進行字符串到int的轉換。

之後,當你已經有一個適當的集合,你可以從它與計算平均值:

const double sum = std::accumulate(grades.begin(), grades.end(), 0.0); 
const double gradesMean = sum/grades.size();