以下代码将打印存储在每个Foo
结构上的值。我遇到的问题是计算i
和j
应该在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;
}
答案 0 :(得分:0)
你确定这是对的:
int init = offset / 5;
我认为这也不对:
for (j = i % 5; j < bar[i].size; j++) {
如果我理解问题设置正确,每个“桶”(Foo对象)中的元素数量可能会有所不同,您应该考虑计算起点时的数量,然后从起点开始计算直到你打印了十件物品。这只需要一个循环。