2014-01-09 5 views
1

У меня есть код для получения чисел, которые я хочу ввести в качестве входных данных, но когда я пытаюсь их получить и найти среднее из них, он не работает должным образом.Среднее значение поиска

const int n; 
float max,min; 
int i,x=0,z=0; 
float ave[n]; 
printf("How many numbers do you want to enter?\n"); 
scanf("%d",&n); 

ответ

7

Вы указали свой массив переменной длины ave в неправильном месте. Объявите его после получения ввода n. И объявить n как int вместо const int (в противном случае изменение const объектов с квалифицированным типом вызывает неопределенное поведение).

int n; 
float max,min; 
int i,x=0,z=0; 
printf("How many numbers do you want to enter?\n"); 
scanf("%d",&n); 
float ave[n]; 
+2

@RoyDictus; Эта функция впервые представлена ​​на C99. Это будет работать. См. Раздел ** 6.7.5.2 Деклараторы массивов ** проекта C99. – haccks

4

Изменить const int n; to int n;
const int n; должен быть инициализирован во время определения. Вы объявили n как const int, и вы пытаетесь сохранить данные в том, что принимаете с входа.

2

Проблема заключается в том, что вы объявляете

float ave[n] 

, прежде чем дать н значение. Так п == 0.

Чтобы исправить это, дать ave[] больший фиксированного размера или распределения памяти к нему после прочтения п.

+2

Итак, n == undefined, необязательно 0. – glglgl

3

У вас есть два случая неопределенного поведения. Во-первых, вы пытаетесь изменить константу (n является константой и ее не следует изменять). Во-вторых, когда вы объявляете массив, вы используете неинициализированный n, который будет равен нулю, и, следовательно, создайте массив нулевой длины, который вы затем продолжаете записывать.

+1

Существует третья, если n равно <= 0. –

0

Вместо этого вы можете создать динамический массив. Здесь пространство памяти создается только во время выполнения. Соответствующие кодовые сегменты следующие:

int* ave; 
ave = (int*)malloc(i*sizeof(int)); 
for (j=0;j<n;j++) 
    { 
    ave[j]=j;       // the pointer can be used as an array 
    printf("%d\n",ave[j]); 
    } 
Смежные вопросы