私は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 を使用すると、正常に動作します。ここで何が起こっているか知っている人はいますか?