You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言for循环数组比较计数结果不符合预期问题排查

问题分析与解决方法

核心问题

你的循环范围设置错误:数组a和b各包含3个元素(索引为0、1、2),但循环条件k < 2仅遍历了前两个元素(k=0和k=1)。第三组元素a[2]=3与b[2]=1的比较完全被跳过,导致sumA始终无法自增,最终输出0 1而非预期的1 1。

额外需要注意:代码中使用malloc分配了内存,但未调用free释放,会造成内存泄漏。

修正后的代码

#include <stdio.h>
#include <stdlib.h>

int main() {

  int a[] = {1, 2, 3};
  int b[] = {3, 2, 1};

  int *res = malloc(2 * sizeof(int));
  // 检查malloc是否成功(可选但推荐)
  if (res == NULL) {
    fprintf(stderr, "Memory allocation failed\n");
    return 1;
  }

  int sumA = 0, sumB = 0;
  // 修改循环条件为k < 3,遍历全部3个元素
  for (int k = 0; k < 3; k++) {
    if (a[k] > b[k]) {
      printf("yes a\n");
      sumA += 1;
    } else if (a[k] < b[k]) {
      printf("yes b\n");
      sumB += 1;
    }
  }

  res[0] = sumA;
  res[1] = sumB;

  printf("%d, %d", res[0], res[1]);

  // 释放分配的内存
  free(res);

  return 0;
}

验证结果

修正后循环会遍历所有3组元素:

  • k=0:a[0]=1 < b[0]=3 → sumB自增为1
  • k=1:a[1]=2 == b[1]=2 → 无操作
  • k=2:a[2]=3 > b[2]=1 → sumA自增为1

最终输出为1, 1,符合预期。

内容的提问来源于stack exchange,提问作者meddhiaka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 06:35:27