I have a code where I need to count number of people in each gender, sum of the gpa, and average of the gpa. Despite the code being nearly identical between the male & female count it's not reading any information from the file on the second loop.
#include<iostream>
#include<iomanip>
#include<fstream>
using namespace std;
void openFiles(ifstream& read, ofstream& write)
{
read.open("StudentsPreformanceData.txt");
if (read.is_open())
cout << "File Opened" << endl;
else
cout << "Error try again";
write.open("Results.txt");
write << fixed << showpoint << setprecision(2);
}
void initialize(int& countFemale, int& countMale, double& sumFemale, double& sumMale)
{
countFemale = 0;
countMale = 0;
sumFemale = 0.00;
sumMale = 0.00;
}
void sumGrades(ifstream& read, double& sum, char gender)
{
char student;
double grade;
while (!read.eof())
{
read >> student;
read >> grade;
if (student == gender)
sum = sum + grade;
//cout << student << " " << grade << " " << sum << endl;
}
read.close();
}
double averageGrades(ifstream& read, double sum, int& count, char gender)
{
char student;
double grade;
while (!read.eof())
{
read >> student;
read >> grade;
if (student == gender)
{
count = count + 1;
}
cout << student << " " << count << " " << sum << endl;
}
return sum / count;
read.close();
}
void printResults()
{
}
int main()
{
ifstream read;
ofstream write;
openFiles(read, write);
int countFemale, countMale;
double sumFemale, sumMale;
initialize(countFemale, countMale, sumFemale, sumMale);
cout << countFemale << sumFemale << countMale << sumMale << endl;
sumGrades(read, sumFemale, 'f');
cout << countFemale << " " << sumFemale << " " << countMale << " " << sumMale << endl;
openFiles(read, write);
sumGrades(read, sumMale, 'm');
cout << countFemale << " " << sumFemale << " " << countMale << " " << sumMale << endl;
openFiles(read, write);
averageGrades(read, sumMale, countMale, 'm');
cout << countFemale << " " << sumFemale << " " << countMale << " " << sumMale << endl;
openFiles(read, write);
averageGrades(read, sumFemale, countFemale, 'f');
cout << countFemale << " " << sumFemale << " " << countMale << " " << sumMale << endl;
}
The attached image is my output
I'm confused because I tried swapping male and females places and again which ever is second didn't count. the code prints out file opened so I know its being opened, i just don't no why it won't run through the list for a 4th time at that point in the code.