2011-12-08 89 views
1

該計劃輸出「女學生的平均GPA是:-1。#IND」,而不是實際應該輸出的內容。我的.dat文件的格式如下:
˚F2.4
˚F2.6 米3.5
等 我希望它輸出的值的平均GPA,但變量「avgfGPA」和「avgmGPA」都結束了爲 「-1#IND。」獲取奇怪的值讀取文本文件,獲得無限值輸出

#include <iostream> 
#include <iomanip> 
#include <fstream> 

using namespace std; 

void openFiles(ifstream& inFile, ofstream& outFile) 
{ 
inFile.open("finalin.dat"); 
outFile.open("finalout.dat"); 
outFile << fixed << showpoint << setprecision(2); 
inFile >> fixed >> showpoint >> setprecision(2); 
if (!inFile||!outFile) 
{ 
cout << "Problem opening file."; 
} 
} 
void initialize(int &countFemale,int &countMale,float &sumFemaleGPA,float &sumMaleGPA) 
{ 
countFemale=0; 
countMale=0; 
sumFemaleGPA=0; 
sumMaleGPA=0; 
} 
void sumGrades(ifstream& inFile, float &sumFemaleGPA, float &sumMaleGPA,int &m,int &f) 
{ 
sumFemaleGPA=0; 
sumMaleGPA=0; 

if (!inFile) 
{ 
    inFile.open("finalin.dat"); 
} 
char sex; 
float grade;  

while(!inFile.eof()) 
{ 

inFile >> sex >> grade; 

switch (sex) 
{ 
case 'f': sumFemaleGPA= (sumFemaleGPA + grade); 
    f++; 
    break; 
case 'm': sumMaleGPA= (sumMaleGPA + grade); 
    m++; 
    break; 
} 
} 
void averageGPA(float &avgfGPA, float &avgmGPA, int &m, int &f, float &sumFemaleGPA, float &sumMaleGPA) 
{ 
avgmGPA=0; 
avgfGPA=0; 

avgfGPA=sumFemaleGPA/f; 
avgmGPA=sumMaleGPA/m; 
} 

void printResults(float &avgfGPA, float &avgmGPA, ofstream& outFile) 
{ 
    cout <<"The average GPA of the female students is: "<< avgfGPA << endl; 
    cout <<"The average GPA of the male students is: "<< avgmGPA; 

    outFile << "The average GPA of the female students is: "<< avgfGPA << endl; 
    outFile <<"The average GPA of the male students is: "<< avgmGPA; 

} 

    int main() 
{ 

int countFemale; 
int countMale; 
float sumFemaleGPA; 
float sumMaleGPA; 
float avgfGPA; 
float avgmGPA; 

ifstream inFile; 
ofstream outFile; 

openFiles(inFile,outFile); 
initialize(countFemale,countMale,sumFemaleGPA,sumMaleGPA); 
sumGrades(inFile,sumFemaleGPA,sumMaleGPA,countMale,countFemale); 
averageGPA(avgfGPA,avgmGPA,countMale,countFemale,sumFemaleGPA,sumMaleGPA); 
printResults(avgfGPA,avgmGPA, outFile); 


} 
+1

你仍然犯上一個問題的錯誤。您應該首先應用這些更正。 – Mysticial

+0

我改變了這些變量,但它仍然沒有給我我想要的解決方案。我懷疑它可能是.eof,或while循環? –

+0

仔細檢查while(!inFile.eof)循環... – AndyG

回答

0

你的問題是與引用,或缺乏:

此代碼:

void averageGPA(float avgfGPA,float avgmGPA,int m,int f,float sumFemaleGPA,float sumMaleGPA){avgmGPA = 0; avgfGPA = 0;

avgfGPA = sumFemaleGPA/f; avgmGPA = sumMaleGPA /米; }

應該

...刪除解決方案。(作業)

更清晰,C++不同於JAVA好需要的,如果你想讓他們在其他地方改變

傳遞值 by reference
+0

我通過添加引用編輯了我以前的代碼,但我仍然得到奇數值,這些值不正確。我看不出還有什麼事情發生,我懷疑這可能是.eof或while循環的問題。我的教授建議我們使用.eof來讀取長度未知的文件。 –

+0

閱讀我對OP的評論,瞭解閱讀文件內容的邏輯。它應該和你寫的有點不同。 – AndyG

+0

得到它的工作!非常感謝您的耐心等待 –