I would declare the functions the following way
const size_t SCORE_NUM = 5;
const size_t STUDENT_NUM = 100; // at least not less than the number of records in the file
size_t inputScores( std::ifstream &, std::string[], double[][SCORE_NUM], size_t );
double computeAverage( const double[], size_t );
char computeLetterGrade( double );
void printGrades( const std::string[], const double[][SCORE_NUM], size_t );
For example function computeAverage could be defined as
double computeAverage( const double scores[], size_t n )
{
double sum = 0.0;
for ( size_t i = 0; i < n; i++ ) sum += scores[i];
return ( n == 0 ? sum : sum / n );
}
It should be called for each row of the array of doubles.
The definition of function inputScores could look as (without testing):
size_t inputScores( std::ifstream &in,
std::string students[],
double scores[][SCORE_NUM],
size_t n )
{
std::string record;
size_t i = 0;
while ( i < n && std::getline( in, record ) )
{
std::istringstream is( record );
std::string lastName;
if ( is >> students[i] && is >> lastName )
{
students[i] += ' ';
students[i] += lastName;
}
std::memset( scores[i], 0, SCORE_NUM * sizeof( double ) );
size_t j = 0;
while ( j < SCORE_NUM && is >> scores[i][j] ) ++j;
++i;
}
return i;
}
8
solved C++ program functions arrays [closed]