变量steady_counter初始化为常数。
cout<< steady_counter;
只要我在上面的代码之前的任何地方都有上述语句,该函数就会按预期运行,并检查整数输入是否是一个周期数。
问题是当cout行不存在时,常量整数在下面的if语句中发生变化。我在输入if-else之前打印了steady_counter,然后在if-else之后测试了这个。
没有cout线,steady_counter会变为4位数字。
for (int i = 0; i < 10; i++)
{
if (CheckArr[i])
{
num_of_unique++;
}
}
if ((steady_counter == num_of_unique) & (final == NumArr[0]) )
{
return true;
}
else
{
return false;
}
}
知道发生了什么事吗?为什么我需要一条cout线来维持常数integer_counter?
答案 0 :(得分:2)
一个明显的问题:
for (int i = counter; i > 0; i --)
NumArr[i] = -1;
这包括从1
到counter
的值;而NumArr
的有效索引则从0
到counter-1
。所以你在阵列外面写字,腐蚀别的东西;可能是另一个局部变量。
更正索引中的逐个错误
NumArr[i-1] = -1;
或使用更规范的循环
for (int i = 0; i < counter; ++i)
或者,对于更多C ++风格,
std::fill(NumArr, NumArr+counter, -1);
可能存在进一步的错误,使用调试器比通过要求人们阅读所有代码更好地找到错误。