//***************************************************************** // R. A. Hillyard // fileAvg5.cpp // March 2001 // // This version lets the user enter the file names //***************************************************************** #include <iostream> #include <fstream> #include <iomanip> using namespace std; void setDecimalPoint(ostream& coutForMe, int places); bool openFiles(ifstream& inFile, ofstream& outFile); int main() { long int idnum; //variable for id number int mid1, mid2, final; //variables for test scores ifstream scoreFile; //declare an input file stream ofstream avgFile; if(!openFiles(scoreFile, avgFile)) //open files and exit if problem { exit(1); } setDecimalPoint(cout, 2); //set precision for output streams setDecimalPoint(avgFile, 2); //read data from file and process while (scoreFile >> idnum >> mid1 >> mid2 >> final) { double avg = (mid1 + mid2 + 2*final) / 4.0; //calculate average cout << idnum << setw(10) << avg << endl; //output result to screen avgFile << idnum << setw(10) << avg << endl; //output result to file }//endwhile scoreFile.close(); //close files avgFile.close(); return 0; } void setDecimalPoint(ostream& coutForMe, int places) { coutForMe.setf(ios::showpoint); coutForMe.setf(ios::fixed); coutForMe.precision(places); }//end setDecimalPoint bool openFiles(ifstream& inFile, ofstream& outFile) { char fileName[20]; cout << "File Name for input? "; cin >> fileName; inFile.open(fileName); //open the file if(inFile.fail()) //check for success and exit if open failed { cout << "unable to open scores.dat file\n"; return false; } cout << "File Name for output? "; cin >> fileName; outFile.open(fileName); //open the file if(outFile.fail()) //check for success and exit if open failed { cout << "unable to open average.dat\n"; return false; } return true; }
//************************program output***************************
File Name for input? scores.dat
File Name for output? average.dat
123456 85.75 234564 85.00 976523 90.75 782346 81.50 987656 80.50 345876 80.25
//*********************contents of scores.dat**********************
123456 82 79 91 234564 88 78 87 976523 91 92 90 782346 77 85 82 987656 62 92 84 345876 77 74 85
//*********************contents of average.dat********************* 123456 85.75 234564 85.00 976523 90.75 782346 81.50 987656 80.50 345876 80.25