C 循环中的数组未获取正确的值

C 循环中的数组未获取正确的值,c,arrays,linux,for-loop,pointers,C,Arrays,Linux,For Loop,Pointers,我的问题是: 我有一个物品和一个包的结构 struct Item { int value; int weight; }; struct Bag { int maxWeight; Item *items; int maxItems; int itemsHolding; }; 在我的主要部分中,我有以下阵列: int testValues[] = { 4, 11, 6, 2, 10, 4, 12, 6, 13, 7, 23 }; 索引0:项目

我的问题是:

我有一个物品和一个包的结构

struct Item {
    int value;
    int weight;
};

struct Bag {
    int maxWeight;
    Item *items;
    int maxItems;
    int itemsHolding;
};
在我的主要部分中,我有以下阵列:

 int testValues[] = { 4, 11, 6, 2, 10, 4, 12, 6, 13, 7, 23 };
  • 索引0:项目总数
  • 指标1:袋子的总重量
  • 最后一个索引:忽略此问题
  • 所有其他索引都是“一对”
例如:

  • 6将表示第一项的值
  • 2将代表第一个项目的重量
  • 等等
然后我有这个项目数组

Item items[testValues[0]];
此函数应将所有值组织到相应的项中:

void item_InitUsableItems(int *values, int nItems, Item *items) {
    for (int i = 2; i < nItems + 2; i+=2) {
        items[i-2].value = values[i];
        items[i-2].weight = values[i+1];
    }
}
然后,我将所有项目打印到控制台,仅用于测试目的:

for (int i = 0; i < 4; i++){
    printf("%d - %d\n", items[i].value, items[i].weight);
}
预期结果如下:

6 - 2
10 - 4
12 - 6
13 - 7
我是新来C的,学习C大约一周了!如果你发现任何不正确的地方,请告诉我

for (int i = 2; i < nItems + 2; i+=2) {
    items[i].value = values[i];
    items[i].weight = values[i+1];
}
为什么
i
i+1
?这些索引应该相同,因此值和权重来自同一项。

无效项\u初始可用项(int*值、int nItems、item*项){
void item_InitUsableItems(int *values, int nItems, Item *items) {
int j = 2;
for (int i = 0; i < nItems; i++) {
    items[i].value = values[j];
    j++;
    items[i].weight = values[j];
    j++;
}
int j=2; 对于(int i=0;i
}


这解决了我的问题。可能不是最漂亮的解决方案,但它很有效

查看是否可以基于
i
计算
j
。那么您就不需要
j
for (int i = 2; i < nItems + 2; i+=2) {
    items[i].value = values[i];
    items[i].weight = values[i+1];
}
for (int i = 0; i < 4; i++){
    printf("%d - %d\n", items[i].value, items[i+1].weight);
}
void item_InitUsableItems(int *values, int nItems, Item *items) {
int j = 2;
for (int i = 0; i < nItems; i++) {
    items[i].value = values[j];
    j++;
    items[i].weight = values[j];
    j++;
}