В вашем коде много основных проблем. Я предлагаю вам отослать любую хорошую C
и узнать, как работает базовая C
программа и указатель.
Во-первых, я не вижу main()
в вашем коде. Прототипом main()
является
int main(void) {
/* some code */
return 0;
}
Во-вторых, здесь
int *a; /* Array of elements */
указатель int
a
не инициализирован и у него нет действительной памяти, поэтому, когда вы делаете *(a+i)
, это вызывает ошибку сегментации, для решения этой проблемы вы должны выделить динамическую память для a
первый.
В-третьих, здесь
float average;
что average
содержит по умолчанию? Это какой-то мусор или ненужные данные. Он должен быть инициализирован с 0
.
Пример кода
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int e; /* how many e ? you should assign it here or take at runtime */
printf("enter the number of elements in the array \n");
scanf("%d",&e);
int *a; /* Allocate memory so that it can hold some values */
a = malloc(e * sizeof(int)); /* allocating memory for e integer equal to e*sizeof(int) bytes */
/* check if malloc was successful or not */
if(a == NULL) {
printf("memory allocation was failed \n");
exit(0);
}
else {
printf("memory allocation is success.. Can proceed further\n ");
/* put the data into dynamically allocated memory */
for(int i=0; i < e; i++) {
scanf("%d", &a[i]);
}
}
float average = 0; /* initialize with 0 */
int i=0;
for(i=0;i<e;i++) {
average += *(a+i);
}
average=average/e; /* average is of float type, e is of int type, doing / operation b/w two different types ? Result may not be as expected due to implicit typeconversion, do explicit typeconversion */
printf("o/p : %f\n", average);
/* job is done with dynamically created array a ? Free it */
free(a);
return 0;
}