ifstream is only reading data 3 times

16 Views Asked by At

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.

0

There are 0 best solutions below