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

C++程序求和数组中不能被2整除元素时异常输出的问题排查

问题排查与修复方案

你遇到的乱码输出问题,主要来自三个核心错误,咱们一步步拆解解决:

1. 数组长度计算完全错误

你调用函数时传的sizeof(arrayOfCrazyNumbers)是数组的总字节数(比如你的数组有12个int元素,每个int占4字节的话,总字节数是48),而不是实际的元素个数。这直接导致循环遍历超出了数组的合法范围,访问到了内存里的垃圾数据,所以输出了一堆毫无意义的数字。

正确的元素个数计算方式应该是:

sizeof(arrayOfCrazyNumbers)/sizeof(arrayOfCrazyNumbers[0])

用数组总字节数除以单个元素的字节数,就能得到准确的元素数量。

2. 判断逻辑搞反了对象

你写的if (i % 2 != 0)是在判断数组的索引位置是否为奇数,而不是判断元素本身能不能被2整除。这完全偏离了你的需求,应该改成判断元素本身:

if (a[i] % 2 != 0)

3. 输出时机不对

你把cout放在了for循环内部,导致每次循环都会打印一次中间累加结果,这不是你想要的最终求和结果。应该把输出语句移到循环结束之后,只打印最终的总和。

另外还有两个小优化点:

  • 原函数的sumofnumbers参数是值传递,虽然传0进去能累加,但直接在函数内部初始化总和会更清晰;
  • 函数声明返回int,但一直返回0,不如直接返回计算好的总和,逻辑更合理。

修正后的完整代码

#include <iostream>
using namespace std;

// 求和数组中不能被2整除的元素
int findDivisibleNumbers(int a[], int n) {
    int sumofnumbers = 0; // 初始化总和为0
    for (int i = 0; i < n; i++) {
        if (a[i] % 2 != 0) { // 判断元素是否不能被2整除
            sumofnumbers += a[i];
        }
    }
    cout << "Sum of values not divisible by 2 = " << sumofnumbers << endl;
    return sumofnumbers; // 返回计算好的总和
}

int main() {
    int arrayOfCrazyNumbers[] = { 11,2446,2343,144,65,26,17,8,29,10,238126,1912338 };
    // 计算准确的元素个数
    int elementCount = sizeof(arrayOfCrazyNumbers)/sizeof(arrayOfCrazyNumbers[0]);
    findDivisibleNumbers(arrayOfCrazyNumbers, elementCount);
    return 0;
}

运行这段代码后,会输出正确的结果:Sum of values not divisible by 2 = 2453(计算过程:11+2343+65+17+29 = 2453)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 08:37:39