Как написать код для этой проблемы, чтобы избежать ошибки компиляции - PullRequest
0 голосов
/ 23 марта 2019

Ссылка на проблему: https://www.codzilla.org/questions?qid=40

Введите код, чтобы найти среднее значение для всех элементов массива.

Этот код предоставлен и не может быть отредактирован:

int  e;  /* Number of elements in array */
int *a;  /* Array of elements */
float average;  /* average to be calculated */

Это то, что я пытался:

int i = 0;
for(i = 0; i < e; i++)
{
    average += *(a + i);
}
average = average / e;

Я ожидаю, что код будет работать правильно и даст мне правильный ответ, но он дает мне следующую ошибку во время компиляции, которую я не могу отладить.

Ваш код не скомпилирован!code_5945838145861895779.c: В функции 'CalculateAverage': code_5945838145861895779.c: 15: 1: ошибка: ожидается ';'до «возврата» code_5945838145861895779.c: 15: 18: ошибка: ожидаемое выражение до токена '}' code_5945838145861895779.c: 15: 18: ошибка: ожидаемое выражение до токена '}'

1 Ответ

2 голосов
/ 23 марта 2019

В вашем коде много основных проблем. Я предлагаю вам отослать любую хорошую 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...