2013-09-21 86 views
0

我在C中遇到問題,當我試圖找到數組的最大浮點數時,但是我的最大int值工作得很好。我想我可能會超過陣列的長度,但我不明白它有多可能。數組問題中的最大浮點數C

int largestInt(int array[], int length){ 
    int max = array[0]; 
    int i; 

    for(i=1; i<length; i++){ 
     if(array[i] > max){ 
       max = array[i]; 
     } 
    } 

    return max; 
} 

上面的代碼工作正常整數,但是如果我改變它與花車爲如下工作,

float largestFloat(float array[], int length){ 
    float max = array[0]; 
    int i; 

    for(i=1; i<length; i++){ 
     if(array[i] > max){ 
       max = array[i]; 
     } 
    } 

    return max; 
} 

有時會給我正確的答案,有時它只是給我一個巨大的數字,甚至沒有在原始數組中。這導致我相信我正在經歷陣列的長度。

float f[15] = {9.5, 45.64, 313.11, 113.89, 81.56, 250.00, 11.9, 469.98, 313.11, 4.68, 34.33, 8013.55, -10.15, 11.5, 88.0} <-- filled with 15 values 
largestFloat(f,15); 

這就是我要運行的。

+1

您需要向我們顯示調用'largestFloat()'函數的代碼。問題可能在那裏。 – ChrisWue

+1

每次調用'largestFloat'時,你確定'length'設置正確嗎?您是否嘗試過使用附加的調試器進行切換? – Dai

+0

我做了一個數組「float f [15];」並用數值填充它。然後我運行「最大的浮點數(f,15);」 – wzsun

回答

1

的問題是,你覺得最大的float但隨後返回int

int largestFloat(float array[], int length){  // return type is int 
    float max = array[0];      // max is float 
    int i; 

    for(i=1; i<length; i++){ 
     if(array[i] > max){ 
       max = array[i]; 
     } 
    } 

    return max; 
} 
+2

它當然沒有幫助,但它應該簡單地放置浮點數,而不是返回明顯不在數組中的東西。 – zneak

+0

是的,這是我的一個錯字。對不起 – wzsun

+2

@wzsun:將代碼複製並粘貼到問題中,而不是重新輸入。如果返回類型錯誤,則在重新輸入代碼時可能會出現其他錯誤。出於這個原因,複製/粘貼遠勝於重新輸入。 – user2357112

2

沒有看到一個完整的例子,我不得不說,你是正確的。數組大小可能是錯誤的。首先解決的返回類型:

float largestFloat(float array[], int length){ 

接下來,你可能想增加一個防範空數組,因爲這將自動overlflow獲取數組[0]:

if (length < 1) return 0; 

largestFloat的其餘部分( ) 很好。

然後調用與:

float f[15] = {2.3 ... 102} <-- filled with 15 values 
size_t length = sizeof f/sizeof f[0]; 
float f_max = largestFloat(f, length); 
printf("max=%g, length=%d\n", f_max, length); 

這將計算(在編譯時)陣列f的實際尺寸。尋找長度不是你認爲應該是的情況。如果輸入a,就會發生這種情況。而不是一個,之間沒有小數點的值。這和錯誤計數是我知道得到14個或更少值的唯一方法,看起來是15個。

+0

這是一個C問題,而不是C++。 – user2357112

+0

@ user2357112完全正確。現在修復。 –