Получение странных значений при чтении текстовых файлов, вывод бесконечных значений - PullRequest
1 голос
/ 08 декабря 2011

Программа выводит «Средний средний балл студенток: -1. # IND» вместо того, что он должен фактически произвести.Мой файл .dat отформатирован так:f 2.4f 2.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 Ответ

0 голосов
/ 08 декабря 2011

Ваша проблема со ссылками или их отсутствие:

Этот код:

void AverageGPA (float avgfGPA, float avgmGPA, int m, int f, float sumFemaleGPA, floatsumMaleGPA) {avgmGPA = 0;avgfGPA = 0;

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

Должно быть

... удаленное решение (домашнее задание)

Чтобы быть более понятным, C ++ отличается от Java тем, что вам нужно передавать значения по ссылке если вы хотите, чтобы они изменились в другом месте

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...