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
相关产品推荐
相关产品推荐

