/********************************************************************************************
readfloats.cpp
    Jim Millard
    for CO211/Fall 1999

Program that reads floating points from a file and displays the largest value, the smallest
value and the average of values in the series.

The input filename has been hardcoded

********************************************************************************************/
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main()
    {
    const char filename[] = "numbers.txt"; //this can be later changed to allow user input

    float current, largest, smallest;
    long double sum = 0.; //for maximum accuracy
    int count = 0;

    //no prompts: just get the data and work on it!
    ifstream input(filename);
    if (!input) //check for a found file
        {
        cerr << endl
             << "The file is invalid or not found. Check for \"" << filename << '"'<< endl
             << "in the current working directory."
             << endl << endl;
        return -1; // error condition
        }
    else
        {
        if (input >> current) // check for a valid first entry
            {
            //force-fit the first value as both smallest and largest; init the sum.
            count = 1;
            largest = current;
            smallest = current;
            sum = current;

            //extract the rest of the set
            while (input >> current)
                {
                count++; //we've got valid input, so increment the count
                sum += current; //accumulate the sum

                //compare to currently held values
                if (current > largest)
                    largest = current;
                else if (current < smallest)
                    smallest = current;
                } //while
            } //if

         //compute the average and display results
         if (count)
            cout << "Results" << endl
                 << "------------------------------" << endl
                 << "Largest:  " << largest << endl
                 << "Smallest: " << smallest << endl
                 << "Average:  " << sum / count << endl;
         else
            cout << "No valid data were read from \"" << filename << '"' << endl;

        return 0;
        } //else
    }