2016-05-13 43 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

相关问题