2013-04-16 59 views
-3

以下代碼將打印存儲在每個Foo結構中的值。我遇到的問題是計算ij應該從offset的值開始計算,它可以變化。 Foo中的項目也會有所不同。偏移量可以從0到分配的值的總量。在這種特殊情況下offset = 6,所以它應該輸出這樣的:結構的特定輸出偏移量C

Bar: 0 - Foo: 6 
Bar: 0 - Foo: 7 
Bar: 0 - Foo: 8 
Bar: 0 - Foo: 9 

Bar: 1 - Foo: 0 
Bar: 1 - Foo: 1 
Bar: 1 - Foo: 2 
Bar: 1 - Foo: 3 
Bar: 1 - Foo: 4 
... 

但現在它輸出:

Bar: 1 - Foo: 1 
Bar: 1 - Foo: 2 
Bar: 1 - Foo: 3 
Bar: 1 - Foo: 4 

Bar: 2 - Foo: 2 
Bar: 2 - Foo: 3 
Bar: 2 - Foo: 4 

Bar: 3 - Foo: 3 
Bar: 3 - Foo: 4 
.... 

#include <stdio.h> 
#include <stdlib.h> 

typedef struct { 
    int val; 
} Foo; 

typedef struct { 
    int size; 
    Foo *foo; 
} Bar; 

#define MAX 10 
int main() { 
    Bar bar[MAX]; 
    int i, j; 
    int arr[10]={10,5,5,5,5,5,5,5,5,5}; 

    for(i = 0; i < MAX; i++) { 
     bar[i].size = arr[i]; 
     bar[i].foo = malloc (sizeof (Foo) * bar[i].size); 
     for(j = 0; j < bar[i].size; j++) { 
      bar[i].foo[j].val = j; 
     } 
    } 

    int offset = 6; 
    int init = offset/5; 
    for (i = init; i < MAX; i++) { 
     for (j = i % 5; j < bar[i].size; j++) { 
      printf("Bar: %d - Foo: %d\n", i, bar[i].foo[j].val); 
     } 
     printf("\n"); 
    } 

    return 0; 
} 
+5

究竟你在問什麼? –

+0

我正在尋找正確的輸出。 (比如上面的輸出),現在它不會以這種方式打印它。 –

+1

你會得到什麼輸出?這裏沒有人會看到五十行代碼,試圖弄清楚你的代碼和預期行爲之間的區別是什麼,至少沒有發現錯誤的線索。 –

回答

0

你確定這是正確的:

int init = offset/5; 

我不認爲這是正確的:

for (j = i % 5; j < bar[i].size; j++) { 

如果我理解這個問題設置正確,你的每一個「桶」(Foo對象)eleements的數量可以有所不同,您應考慮到有多少求出起點時,再算上了從出發點開始直到您打印了10個項目。這隻需要一個循環。

+0

你是對的,這些陳述是我遇到的問題。每個「桶」中元素的數量可能會有所不同。 '偏移量'可以看作是我不想顯示的項目。即'偏移= 25' - >不顯示前25項。 –

+0

對,假設'int arr [10] = {10,5,5,5,5,5,5,5,5,5,5};'不是數據結構必須如何工作的一部分, 'int arr [10] = {7,4,3,5,9,5,2,5,8,5};'也是有效的,那麼你必須基本上「計數直到你到達你之前的條目偏移量,然後計算你需要從這個值中走多遠,你當前的代碼只適用於每個元素爲5的數組,這顯然是錯誤的,因爲第一個元素是10. –

+0

所以我猜我需要再增加兩個循環來計算在輸出之前我需要走多遠,這是正確的嗎? –