having an issue with pulling from a file and outputting to another file.

My professor has me writing a program with the following instructions and I'm a little stuck mentally in getting the output to the screen and to a file. Any help is thankful.

Write a program to calculate students’ average test scores and their grades. You may assume the following input data is read from a text file.

Johnson 85 83 77 91 76
Aniston 80 90 95 93 48
Cooper 78 81 11 90 73
Gupta 92 83 30 69 87
Blair 23 45 96 38 59
Clark 60 85 45 39 67
Kennedy 77 31 52 74 83
Bronson 93 94 89 77 97
Sunny 79 85 28 93 82
Smith 85 72 49 75 63

Use three arrays: a one-dimensional array to store the students’ names, a (parallel) two-dimensional array to store the test scores, and a parallel one-dimensional array to store grades. Your program must contain at least the following functions: a function called GetData to read and store data into two arrays, a function called Average that is used to calculate the average test score and grade, and a function called PrintResults to output the results. The student names should be to the left with a width of 10 columns. The test scores should be to the right with a width of 8 columns. Have your program also output the class average on a line after the output. Name the file Grades.cpp

This is my code:

#include<iostream>
#include<fstream>
#include<string>
#include<iomanip>
using namespace std;


const int MAX = 50;
// a function called GetData to read and store data into two arrays,
void GetData(ifstream& infile,string name[],int scores[][5],int& n)
{
n = 0;
int i=0;
int j=0;
while(!infile.eof())
{
infile >> name[i];
for(int j=0; j<5; j++)
infile >> scores[i][j];
i++;
}
n = i;
}

char determineGrade(double avg)
{
if(avg>=90 && avg<=100)
return 'A';
else if(avg>=80 && avg<=89)
return 'B';
if(avg>=70 && avg<=79)
return 'C';
if(avg>=60 && avg<=69)
return 'D';
if(avg>=50 && avg<=59)
return 'F';
}

// a function called Average that is used to calculate the average test score and grade,
void Average(int a[][5],char grade[],double avg[],int no_of_students)
{
for(int i=0; i<no_of_students; i++)
{
double sum =0;
for(int j=0; j<5; j++)
sum+= a[i][j];
avg[i] = sum/static_cast<double> (5);
grade[i] = determineGrade(avg[i]);
}
}

// function called PrintResults to output the results.
void PrintResults(string name[],double avg[],int scores[][5],char grade[],int n)
{
for(int i=0; i<n; i++){
cout << left << setw(10)<< name[i];
for(int k=0; k<5; k++)
cout << right << setw(8) << scores[i][k];
cout << endl;
}
cout << setw(8) <<"Average ";
for(int i=0; i<n; i++)
cout << setw(5) << avg[i];
cout << endl;
}

int main()
{
// a one-dimensional array to store the students names,
string name[MAX];
// a (parallel) two-dimensional array to store the test scores,
int scores[MAX][5];
// a parallel one-dimensional array to store grades.
char grade[MAX];
int no_of_students;
double avg[MAX];

ifstream infile("StudentData.txt");

if(!infile)
{
cout <<"unable to open file.so exiting from program" << endl;
return 0;
}

GetData(infile, name, scores, no_of_students);
infile.close();
Average(scores, grade, avg, no_of_students);
PrintResults(name,avg,scores,grade,no_of_students);


return 0;
}
Last edited on
My professor has me writing a program with the following instructions and I'm a little stuck mentally in getting the output to the screen and to a file. Any help is thankful.

Just write to both:
1
2
3
4
std::ofstream fout("something.whatever.txt");
std::cout << "Hello!" << std::endl;
fout << "Hello!" << std::endl;
fout.close();


std::ofstream is for output files
std::ifstream is for input files
std::fstream can go both ways
Last edited on
got it thank you!
Topic archived. No new replies allowed.