Функция store
имеет неопределенное поведение, поскольку массив еще не был инициализирован. Таким образом, условие в l oop
while (arr[i]!=-1)
недопустимо. Более того, переменная i
не изменяется в l oop.
Функция может быть определена следующим образом /
void store( int arr[],int &GradeCount ) //for taking input by user pass by reference
{
const int Sentinel = -1;
GradeCount = 0;
bool success = true;
do
{
cout << "Enter grade : ";
int value = Sentinel;
if ( ( success = ( cin >> value && value != Sentinel ) ) )
{
arr[GradeCount++] = value;
}
} while ( success );
}
Но было бы гораздо лучше объявить и определите функцию следующим образом
size_t store( int arr[], size_t n, int sentinel = -1 )
{
size_t GradeCount = 0;
if ( n != 0 )
{
bool success = true;;
do
{
cout << "Enter grade : ";
int value = sentinel;
if ( ( success = ( cin >> value && value != sentinel ) ) )
{
arr[GradeCount++] = value;
}
} while ( success && GradeCount < n );
}
return GradeCount;
}
и назовите ее как
int grades[100];
size_t GradeCount = store( grades, 100 );
Функция getAverage
должна быть объявлена и определена следующим образом
double getAverage( const int arr[], size_t n )
{
double sum = 0.0;
for ( size_t i = 0; i < n; i++ )
{
sum += arr[i];
}
return n == 0 ? 0.0 : sum / n;
}