#arrays #c #compiler-errors #implicit-conversion #function-definition
#массивы #c #ошибки компилятора #неявное преобразование #определение функции
Вопрос:
#include <stdio.h>
#include <stdlib.h>
float Findaverage(float n,float numbers[]) {
float sum = 0;
for (int j = 0; j < n; j ) {
sum = numbers[j];
}
printf("The average number of the array is: %f", sum/n);
}
int main() {
int sum = 0;
float numbers[50];
float average;
printf("Enter 50 elements: ");
// taking input and storing it in an array
for(int i = 0; i < 50; i) {
scanf("%f", amp;numbers[i]);
}
average = Findaverage(50,numbers[50]);
printf("nThe average number of the array is: %f", average );
return 0;
}
На выходе выдается ошибка «передача ‘float’ параметру несовместимого типа ‘float *’; возьмите адрес с amp;». Почему это так?
Комментарии:
1. Ваш код поврежден. Ошибка указывает на то, что ожидаемый аргумент должен быть указателем, в то время как вы передаете значение с плавающей точкой. Вы должны изменить 2-й аргумент вызова findAverage на указатель, возможно, вы хотите передать указатель на первый элемент numbers — так что просто используйте numbers . Кстати, вы передаете 50-й элемент, который находится за пределами.
Ответ №1:
Для начала функция Findaverage
ничего не возвращает.
Вам нужно добавить этот оператор в функцию
return sum / n;
И первый параметр должен иметь целочисленный тип вместо типа float
.
float Findaverage(float n,float numbers[]) {
^^^^^
Во-вторых, в этом вызове функции
average = Findaverage(50,numbers[50]);
аргумент numbers[50]
, имеющий тип float
вместо типа float *
, недопустим. Вам нужно написать
average = Findaverage(50,numbers);
Функция может быть объявлена и определена следующим образом
double Findaverage( const float numbers[], size_t n )
{
double sum = 0.0;
for ( size_t i = 0; i < n; i )
{
sum = numbers[i];
}
return n == 0 ? 0.0 : sum / n;
}
И функция может быть вызвана как
double average = Findaverage( numbers, sizeof( numbers ) / sizeof( *numbers ) );
Ответ №2:
Изменить
average = Findaverage(50,numbers[50]);
Для
average = Findaverage(50,numbers);
numbers[50]
относится к одному элементу массива, а не ко всему массиву. Он также находится в конце вашего массива (который индексируется от 0
до 49
).