2012-12-03 49 views
0

我有此代碼循環通過一定範圍在陣列用C

int x = 0 
int MAX = 21; 
int MIN = 18; 
char *arr[40]; 
do{ 
    char* current = cycle(x,arr) 
    x++; 
}while(x<10000000) 

我的週期()當前循環通過整個陣列

unsigned char *cycle(int counter, unsigned char *packets[40]){ 
int tmp = counter % 40; 
return packets[tmp]; 
} 

但我希望它循環在陣列只是在[MIN ,MAX]範圍。 所以while循環中的返回值是:arr [18],arr [19],arr [20],arr [21],arr [18],arr [19] ...

任何想法如何執行這個?我不想使用全局變量的解決方案。

感謝您的幫助!

+1

添加新的功能,這需要最小/最大限值作爲參數'cycle_range'? –

回答

2

嘗試是這樣的:

sometype cycle_range(int counter, sometype array[], unsigned min, unsigned max) { 

    sometype* first = array+min; 
    unsigned length = max-min+1; 

    return first[counter % length]; 
} 

這個工作就像你的解決方案,但它在array進一步啓動min元素和遍歷max-min+1元素,而不是40

sometype你的情況unsigned char*,但如果你願意,你可以在這裏代替另一種類型)

+0

爲什麼要聲明,分配和使用'first'?爲什麼不就這樣做:'return array [min +(counter%(max - min + 1));' – alk

+1

完全一樣的東西,只要看起來好一點,如果你把它分解成 – Kos

+0

同意;在維護代碼時,我寧願看到比array [min +(counter%(max - min + 1))]'更糟糕的版本。 – user4815162342

0
unsigned char *cycle(int counter,int min, int max, unsigned char *packets[40]){ 
    int tmp = (counter % (max - min + 1)) + min; 
    return packets[tmp]; 
}