2011-12-08 3 views
1

プログラムは、実際に出すべきではなく、「女性の平均GPAは-1です。#IND」を出力しています。
私は出力にそれらの値の平均GPAをそれをしたい2.4
メートル3.5
など
2.6 F、F、しかし、変数「avgfGPA」と「avgmGPAは」終わるされています。私の.datファイルを同じようにフォーマットされます"-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で何かか、ループ中にあるかもしれないと思う? –

+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/m; }

であるべき

あなたは彼らが他の場所で

を変更したい場合は値 by referenceを渡す必要があることに...削除溶液(宿題)

明確にするために、C++は、Javaと異なっています

+0

参照を追加して前のコードを編集しましたが、まだ正しくない奇妙な値が表示されています。他に何が起きているのかわかりませんが、.eofやwhileループの問題かもしれません。私の教授は、長さが不明なファイルを読むために.eofを使うことを勧めました。 –

+0

あなたのOPに私のコメントを読んでください。あなたが書いたのと少し違うはずです。 – AndyG

+0

うまくいきました!お忍びいただきありがとうございます –

関連する問題