![](/img/trans.png)
[英]C program to output the largest element of array with the index of the largest element of array
[英]Strange output from simple C program to find the largest continuous subarray in an array
我是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而不是變量,則效果很好。 有人知道這是怎么回事嗎?
maxSoFar
有一些任意數據,因此您需要先對其進行初始化
int maxSoFar = 0, i = 0;
^^Initialize to zero
您的錯誤在這里
int maxSoFar, i = 0
您從未聲明過maxSoFar,因此它正在使用垃圾數據。
將其初始化為0,就可以了。
它給您一個垃圾值,因為您從未初始化maxSoFar
。 這意味着它將具有那時存儲在內存中的值。
您的主要問題是maxSoFar
是局部(自動)變量,因此,如果未初始化它,它將具有不確定的值,因此該程序的結果也是不確定的。 解決方法是正確初始化maxSoFar
,可能初始化為array
的第一個元素。
為了完整起見,C99標准草案的相關部分為6.7.8
初始化第10段 ,其中指出:
如果未自動初始化具有自動存儲期限的對象,則其值不確定。[...]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.