来自结构的特定输出给出C中的偏移量

时间:2013-04-16 19:50:28

标签: c struct

以下代码将打印存储在每个Foo结构上的值。我遇到的问题是计算ij应该在offset的值开始的位置,它可能会有所不同。 Foo中的项目也可能有所不同。 offset可以从0到分配的总值。在这个特殊情况下offset = 6,所以它应输出:

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;
}

1 个答案:

答案 0 :(得分:0)

你确定这是对的:

int init = offset / 5;

我认为这也不对:

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

如果我理解问题设置正确,每个“桶”(Foo对象)中的元素数量可能会有所不同,您应该考虑计算起点时的数量,然后从起点开始计算直到你打印了十件物品。这只需要一个循环。