Ваше решение должно работать так, как описано в вашем примере.
double total = 0;
// ...
averageScore = total/numPlayers; // Result of division is of type double.
Здесь вы делящие double
на int
и результат должен быть double
. Таким образом, никакого приведения не требуется.
Некоторые другие проблемы, хотя:
- Вы объявившие параметр
score
в int*
, который позволяет клиенту передавать нулевое значение (и не проверить это).
- Вы указали параметр
numPlayers
как int
, который является плохой практикой, вместо этого объявите std::size_t
.
averageScore
объявлен как параметр, но аргумент никогда не используется. Вместо этого объявите его как локальную переменную.
- У вас отсутствует const-correctness, то есть параметры прохода как
const
, когда вы не собираетесь изменять.
Рассмотрите возможность передачи score
в качестве ссылки на int[N]
, используя вместо этого параметр шаблона. Тогда вам не придется передавать длину массива в качестве второго параметра. Например .:
template <const std::size_t N>
double average(const int (&score)[N]) {
return static_cast<double>(std::accumulate(std::begin(score), std::end(score), 0))/N;
}
и использовать в качестве:
int score[5] = { 2, 2, 3, 4, 5};
std::cout << std::fixed << std::showpoint << std::setprecision(2);
std::cout << average(score) << std::endl; // Outputs 3.20
Можно также использовать контейнер из стандартной библиотеки, а не встроенный в массив для score
, например, std::array
.
Почему 'double averageScore' аргумент и переменная locale? –
Удалите параметр 'double averageScore', поскольку вы возвращаете значение и не меняете аргумент. –
Потому что я должен использовать его в другой функции, которая отображает имена и оценки игроков, которые ниже среднего. Он объявлен в функции, поэтому мне не нужно делать его локальной переменной. Если я ошибаюсь, сообщите мне, я новичок в этом. – Zach707