2015-03-05 5 views
-2

У меня есть этот кусок кода:Инициирование массив неизвестного размера в C

#include <stdio.h> 

int average(int array []); 

int main() { 

int num_array[]; 


int x = 0; 

    while(num_array[x] != -1){ 

    printf("Enter a number\n"); 
    scanf("%d",&num_array[x]); 

    x++; 

    } 

    printf("%d\n", average(num_array)); 

    return 0; 
} 



int average(int array[]){ 

    int i; 
    int total_size = (int)sizeof(array); 
    int sum = 0; 

    for(i = 0; i < total_size; i++){ 

    sum = sum + array[i]; 

    } 

    return sum/total_size; 

} 

Но я получаю сообщение об ошибке во время компиляции, потому что я не инициализацией массива. Однако я не могу этого сделать, так как я не знаю, что это размер.

Как я могу это решить?

+1

Используйте 'таНос() 'и' realloc() '. – ForceBru

+0

@ForceBru как? – laker001

+0

@ForceBru, как они сказали, вам нужно использовать 'malloc()' с указателем на массив. 'int * num_array;' затем используйте этот указатель в 'malloc()' –

ответ

1

Вы не можете объявить массив как

int num_array[]; 

в C кроме случаев, когда он является параметром функции. Вы должны указать размер.

0

Здесь необходимо указать размер массива: int num_array[];.

Если вы работаете со структурой неизвестного размера, вы можете:

  • Попросите пользователя, сколько номеров будут введены (на самом деле не практично, но может быть достаточно, если ваш случай является тривиальным один).

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

  • Или вы используете связанный список, такой как структура данных, и создаете новые элементы по мере продвижения, тем самым позволяя вашему списку расти столько, сколько вам нужно.

1

Это на самом деле удивительно сложная проблема в C, если вы не используете библиотеку массивов. То, о чем вы говорите, - это растущий массив. Для того, что вы пытаетесь сделать, вы начинаете с начального размера, скажем, 10, используя malloc(), и по мере роста входных данных вы должны обладать размером до realloc() массивом в большем размере. Как правило, вы удваиваете размер массива каждый раз при достижении предела. Если вы начинающий программист на C, это, вероятно, слишком много, чтобы взять на себя. Я установил фиксированный предел и обеспечил бы его соблюдение, не приняв больше ввода после того, как будет достигнут предел. Учитывая, что Вы можете удобно выделить 1000-int с и человек не хочет, чтобы напечатать что много, вы можете легко сделать практический предел загодя и объявить массив как таковой:

int num_array[1000]; 
Смежные вопросы