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

