//sumafile.cpp -- functions with an array argument
#include <iostream>
#include <fstream> //file I/O support
#include <cstdlib> //support for exit()
constint SIZE = 60;
int main()
{
usingnamespace std;
char filename[SIZE];
ifstream inFile; //object for handling file input
cout << "Enter name of the data file: ";
cin.getline(filename, SIZE);
inFile.open(filename); //associate inFile with a file
if (!inFile.is_open()) //failed to open file
{
cout << "Could not open the file " << filename << endl;
cout << "Program terminating.\n";
exit(EXIT_FAILURE);
}
double value;
double sum = 0.0;
int count = 0; //number of items read
inFile >> value; //get first value
while (inFile.good()) //while input good and not at EOF
{
++count; //one more item read
sum += value; //calculate running total
inFile >> value; //get next value
}
if (inFile.eof())
cout << "End of the file reached.\n";
elseif (inFile.fail())
cout << "Input terminated by data musmatch.\n";
else
cout << "Input terminated for unkown reason.\n";
if (count == 0)
cout << "No data processed.\n";
else
{
cout << "Items read: " << count << endl;
cout << "Sum: " << sum << endl;
cout << "Average: " << sum / count << endl;
}
inFile.close(); //finished with the file
system("pause");
return 0;
}
I'm taking a wild guess and suggesting that your loop is the problem. The last value is probably being read and the good function returns false due to the eof bit having been set. Therefore the count and sum doesn't get updated. Try changing the stream operation to the first thing within the loop and get rid of the operation right before the loop. This way the last item will be counted, I think.