2016-05-13 71 views
-2

我是C的初學者,我嘗試使用鍵盤輸入來創建一個計算數組最大值的程序。我不明白爲什麼這個代碼打印4203785。我認爲這個算法是正確的。有人能幫我嗎?此代碼爲什麼打印一個不是我最大的數字?

int calcola_massimo(int vettore[], int size) { 

     int max = vettore[0]; 
     int i; 

     for(i = 0; i < size; i++){ 

      if(vettore[i] > max){ 
       max = vettore[i]; 
      } 
     } 

     return max; 
    } 


    int main(int argc, char *argv[]) { 

     int array[10]; 
     int j; 
     int max; 

     for(j = 0; j< SIZE; j++){ 
      printf("Inserire valore n. %d \n", j+1); 
      scanf("%d", array); 
     } 

     max = calcola_massimo(array, SIZE); 
     printf("Il valore massimo e' : %d", max); 

     return 0; 
    } 
+3

您正在將該值掃描到數組的* first *元素中,而不是第j個元素。 –

+5

'scanf(「%d」,&array [j]);' –

+1

將其更改爲'scanf(「%d」,&array [j])''。也可以將'array'賦值爲這樣 - 'int array [10] = {0};' – kuro

回答

2

對於初學者來說會更好聲明數組一樣

int array[SIZE]; 

至於循環,那麼你必須寫要麼

scanf("%d", array + j); 

scanf("%d", &array[j]); 

否則,你總是輸入array[0]。數組中的所有其他元素都未初始化。

這將是更好地定義函數本身通過以下方式

int * calcola_massimo(const int vettore[], size_t size) 
{ 
    const int *max = vettore; 
    size_t i; 

    for (i = 1; i < size; i++ ) 
    { 
     if (*max < vettore[i]) max = vettore + i; 
    } 

    return (int *)max; 
} 

,因爲沒有什麼可以阻止用戶傳遞大小等於0。您的原始功能在這種情況下,將有不確定的行爲。

+0

取消所有以前的評論 - 你有一個很好的創新解決方案。 – chux

+0

@chux你是什麼意思? –

+0

「取消所有以前的評論」 - >我以前的評論 - 你可能已經看到,錯誤地報告你的答案中有問題。 – chux

相關問題