我对 C 很陌生,我只是在玩,看看是否可以重新创建一个简单的子数组添加程序(找到数组中最大的连续子数组)。我遇到了一个奇怪的问题,如果我将n定义为整数并将其用作我的 for 循环中的条件,我将得到绝对的垃圾。
原谅这个奇怪的代码,我几乎只是复制并粘贴了一个我一直在玩弄的文件(很多额外的 printfs 等)。如果我运行它,对于 for 循环中的每个 printf 调用,我都会得到“4196053”或类似的输出。即使在第一次 printf 调用中(在进入循环之前),它似乎也被搞砸了。
#include <stdio.h>
int maxI (int a, int b)
{
int max = (a >= b) ? a : b;
return max;
}
int main (void)
{
int array[] = { -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5};
int n = 11;
int maxSoFar, i = 0;
int maxHere = 0;
printf ("%i\n", maxSoFar); //why is it screwing up here?
for (i = 0; i < n; i++) {
printf ("%i\n", maxSoFar);
maxHere = maxI(maxHere + array[i], 0);
maxSoFar = maxI(maxSoFar, maxHere);
}
printf ("The max is %i.\n", maxSoFar);
return 0;
}
如果我只在条件中使用 11 而不是变量,它可以正常工作。有人知道这里发生了什么吗?