2015-12-16 2 views
-3

Это содержимое моего max_subarray_data.hЯ ищу способ, чтобы инициализировать массив в С заголовочном файле

#include<stdlib.h> 

    int price[]={100,113,110,85,105,102,86,63,81,101,94,106,101,79,94,90,97}; 
    int n=(int)(sizeof(price)/sizeof(int))-1; 
    int change[]={}; 
    for(int k=1;k<=n;k++) **//here it is giving error-expected identifier or '('** 
     change[i]=price[i]-price[i-1]; 

Я ищу способ справиться с этой ситуацией!

+3

heh? вы пишете инструкцию вне функции? Как? –

+2

Избегайте использования кода в файлах заголовков! Придерживайтесь объявления типов, макроопределений и т. Д. ... – pmg

+0

Я хочу рассчитать массив изменений здесь сам, а не вызывать его из файла main.c. – FibonacciCoder

ответ

2

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

max_subarray_data.h должен содержать следующее:

extern int price[]; 
extern int change[]; 

void init_change(); 

Затем создайте max_subarray_data.c, который содержит:

int price[]={100,113,110,85,105,102,86,63,81,101,94,106,101,79,94,90,97}; 
int change[(sizeof(price)/sizeof(int))-1]; 

void init_change() 
{ 
    int n=(int)(sizeof(price)/sizeof(int))-1; 
    for(int i=1;i<=n;i++) { 
     change[i-1]=price[i]-price[i-1]; 
    } 
} 

Затем в main, вам нужно вызвать init_change() для инициализации change.

EDIT:

Кроме того, обратите внимание, что цикл в настоящее время присваивает change[i-1] вместо change[i], в противном случае вы будете писать один элемент после конца массива, а первый элемент будет неинициализированным.

+0

Спасибо! Это помогло. – FibonacciCoder

+0

@FibonacciCoder Glad Я мог бы помочь. Не стесняйтесь [принять этот ответ] (http://stackoverflow.com/help/accepted-answer), если вы сочтете это полезным. – dbush

+0

Ошибка исчезла, но я все еще не получаю желаемый результат. Будем ли я спрашивать об этом в другом вопросе? – FibonacciCoder

1

Лучшая практика - следить за тем, что @dbush сделал сообщение. но если вы настаиваете, вы можете выполнить инициализацию макросов следующим образом:

#include <stdio.h> 


#define PRICE_0   100 
#define PRICE_1   113 
#define PRICE_2   110 
#define PRICE_3   85 
#define PRICE_4   105 
#define PRICE_5   102 
#define PRICE_6   86 
#define PRICE_7   63 
#define PRICE_8   81 
#define PRICE_9   101 
#define PRICE_10  94 
#define PRICE_11  106 
#define PRICE_12  101 
#define PRICE_13  79 
#define PRICE_14  94 
#define PRICE_15  90 
#define PRICE_16  97 

int price[]={ 
    PRICE_0, // 0 
    PRICE_1, // 1 
    PRICE_2, // 2 
    PRICE_3, // 3 
    PRICE_4, // 4 
    PRICE_5, // 5 
    PRICE_6, // 6 
    PRICE_7, // 7 
    PRICE_8, // 8 
    PRICE_9, // 9 
    PRICE_10, // 10 
    PRICE_11, // 11 
    PRICE_12, // 12 
    PRICE_13, // 13 
    PRICE_14, // 14 
    PRICE_15, // 15 
    PRICE_16}; // 16 


#define PRICE_DIF(a,b) (PRICE_ ## a - PRICE_ ## b) 
int change[]={ 
    0,    // <-- what about this? :(
    PRICE_DIF(1,0), 
    PRICE_DIF(2,1), 
    PRICE_DIF(3,2), 
    PRICE_DIF(4,3), 
    PRICE_DIF(5,4), 
    PRICE_DIF(6,5), 
    PRICE_DIF(7,6), 
    PRICE_DIF(8,7), 
    PRICE_DIF(9,8), 
    PRICE_DIF(10,9), 
    PRICE_DIF(11,10), 
    PRICE_DIF(12,11), 
    PRICE_DIF(13,12), 
    PRICE_DIF(14,13), 
    PRICE_DIF(15,14), 
    PRICE_DIF(16,15), 

}; 



int main(void){ 
    for(int k=0;k<=17;k++) 
     printf("%d\n",change[k]); 

    return 0; 
} 
Смежные вопросы