【问题标题】:Sum of two buffers in for loopfor循环中两个缓冲区的总和
【发布时间】:2016-07-08 11:01:19
【问题描述】:

我有两个大小不同的缓冲区,我需要获得第三个缓冲区,它等于两者之和。

这就是我的做法(我知道这是错误的)

    for (i = 0; i < num; i += c){
    for (i2 = 0; i2 < num2; i2 += c2){

        printf("%d ",(buf[i]+buf2[i2])/2);

        }
}

我不想完成 i2 循环,然后将 i 迭代 1,我想让两个 for 循环同时工作,我不知道该怎么做,因为 num2>num 所以如果我使用像这样单身:

 `for (i = 0, i2=0; i < num, i2 < num2; i+=c, i2+=c)`

我不认为它会起作用。

我曾想过使用上面写的代码并添加类似的内容:当 i = num 时让 buf[i] 等于 0。

提前致谢。

【问题讨论】:

  • 完成抱歉,我不知道它应该在那里。

标签: c loops for-loop while-loop buffer


【解决方案1】:

您可以迭代直到到达较小数组的末尾,然后继续前进以获取较大的数组:

int i;
int lower = num > num2 ? num2 : num;
int upper = num > num2 ? num : num2;
int buf3[upper];

for (i = 0; i < lower; ++i) {
    buf3[i] = buf[i] + buf2[i];
}

for (i; i < upper; ++i) {
    if (upper == num2) {
        buf3[i] = buf2[i];
    }
    else {
        buf3[i] = buf[i];
    }
}

【讨论】:

  • 没想到,我觉得自己很笨。非常感谢!
  • 还有一件事,我遇到了 buf3[i] += buf2[i]; 的问题。和 buf3[i] += buf[i];我删除了 + 并且它起作用了。我不知道为什么
  • 你是对的。 buf3[i] += x 只是意味着将x 添加到buf3[i],这也应该有效。
  • 也许一个未分配值的默认值默认是巨大的?
  • @HanounFouad 这可能就是答案。您可以先将 buf3 数组清零。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多