I have this batting average program. My problem is that I cannot output this program using input/output files so that it shows the highest/lowest averages and the names to go with them. The code I have in main is not right because it is only outputting "Highest batting average is: 0" and "Players with the highest batting average: " None of the averages are 0 so it should not be outputting that, and there should be a name next to the highest batting average. The same goes with the lowest. This is what I have so far:
#include "Player.h"
#include "Stack.h"
#include <fstream>
using namespace std;
int main()
{
    Player x;
    string name;
    double avg;
ifstream infile("avgs.txt"); 
    while (infile >> name >> avg)
    {
        x.insertPlayer(name, avg);
    }
    infile.close();
    x.printHigh();
    x.printLow();
    if(!infile)
    {
        cout << "Unable to open the file for writing " << endl;
        exit(0);
    }
    ofstream outfile("avgs.txt");
    if (!outfile)
    {
        cout << "Error opening file " << endl;
        exit(0);
    }
    outfile << endl;
}
Here are the files to the Player class, and the Stack class in case it is needed aswell:
////Player.h
#include "stdafx.h"
#include <iostream>
#include <string>
#include "Stack.h"
using std::string;
class Player
{
public:
    double lowest;
    double highest;
    Stack<string> low;
    Stack <string> high;
    void insertPlayer(string name, double batAvg);
    void printHigh();
    void printLow();
};
This is the .cpp file for the Player class:
#include "stdafx.h"
#include <iostream>
#include <string>
#include "Player.h"
using namespace std;
using std::string;
void Player::insertPlayer(string name, double batAvg)
{
    cout << "Player " << name << " has an average of: " << batAvg << endl;
    if (low.empty() && high.empty())
    {
        low.push(name);
        high.push(name);
        highest = lowest = batAvg;
    }
    else
    {
        if (batAvg>highest)
        {
            while (!high.empty())
                high.pop();
            highest = batAvg;
            high.push(name);
        }
        else if (batAvg == highest)
                high.push(name);
            else if (batAvg<lowest)
                {
                    while (!low.empty())
                        low.pop();
                    lowest = batAvg;
                    low.push(name);
                }
                else if (batAvg == lowest)
                        low.push(name);
    }
}
void Player::printHigh()
{
    cout << "Highest batting average is: " << highest << endl;
    cout << "Players with the highest batting average: " << endl;
}
void Player::printLow()
{
    cout << "Lowest batting average is: " << lowest << endl;
    cout << "Players with the lowest batting average: " << endl;
}
And my Stack class if it is needed:
#ifndef STACK
#define STACK
#include "stdafx.h"
#include <iostream>
#include <vector>
using namespace std;
template <class T>
class Stack : public exception
{
private:
    vector<T>myStacks;
public:
    void push(T const& uStack);
    void pop();
    T peek() const;
    bool empty() const
    {
        return myStacks.empty();
    }
};
template <class T>
void Stack<T>::push(T const& uStack)
{
    myStacks.push_back(uStack);
}
template <class T>
void Stack<T>::pop()
{
    if (myStacks.empty())
    {
        throw std::out_of_range("Stack <>::pop(): This is an empty stack ");
    }
    myStacks.pop_back();
}
template <class T>
T Stack<T>::peek() const
{
    if (myStacks.empty())
    {
        throw std::out_of_range("Stack<>::peek(): This is an empty stack ");
    }
    return myStacks.back();
}
#endif
The focus code that I am trying to output is Player.cpp, but the Stack.h and Player.h are needed to make it run. In main() I need to output the names, averages, and the people with the highest/lowest averages. Any help is appreciated!
The text file consists of players and their averages, for example: Orlando .775 Charles .606 J.D. .775 Gina .400 Sam .702 Rich .686
and so on.