【问题标题】:Array in for cycle not getting proper values循环中的数组没有得到正确的值
【发布时间】:2020-03-22 10:55:54
【问题描述】:

我的问题:

我有一个项目和一个包的结构;

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 代表第一项重量
  • 等等

然后我有这个 Items 数组

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

调用函数:

item_InitUsableItems(testValues, testValues[0], items);

然后我将所有项目打印到控制台仅用于测试目的:

for (int i = 0; i < 4; i++){
    printf("%d - %d\n", items[i].value, items[i].weight);
}

这给了我这样的结果:

6 - 2
-1231927808 - -1282274509
10 - 4
1666274963 - 22033

预期的结果是这样的:

6 - 2
10 - 4
12 - 6
13 - 7

我是 C 的新手,大约学习了一周!如果您发现其他任何不正确的地方,请告诉我!

【问题讨论】:

    标签: c arrays linux for-loop pointers


    【解决方案1】:
    for (int i = 2; i < nItems + 2; i+=2) {
        items[i].value = values[i];
        items[i].weight = values[i+1];
    }
    

    循环初始化item[2]item[5]。它应该通过item[3]初始化item[0]

    for (int i = 0; i < 4; i++){
        printf("%d - %d\n", items[i].value, items[i+1].weight);
    }
    

    为什么是ii+1?这些指标应该是相同的,所以价值和权重来自同一个项目。

    【讨论】:

      【解决方案2】:
      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++;
      }
      

      }

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

      【讨论】:

      • 看看能不能根据i计算出j。那你就不需要j了。
      猜你喜欢
      • 2014-08-29
      • 2021-05-28
      • 1970-01-01
      • 2012-11-10
      • 2019-07-20
      • 1970-01-01
      • 2022-10-19
      • 2022-08-16
      • 1970-01-01
      相关资源
      最近更新 更多