【问题标题】:Why does this code print a number that isn't my maximum? [closed]为什么此代码打印的数字不是我的最大值? [关闭]
【发布时间】:2016-05-13 11:04:48
【问题描述】:

我是 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;
    }

【问题讨论】:

  • 您将值扫描到数组的 first 元素中,而不是 jth。
  • scanf("%d", &amp;array[j]);
  • 将其更改为scanf("%d", &amp;array[j])。也将array 分配给喜欢这个 - int array[10] = {0};
  • scanf("%d", array + j); 也可以使用int array[SIZE]; 而不是int array[10];

标签: c


【解决方案1】:

对于初学者来说,最好将数组声明为

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 的大小。在这种情况下,您的原始函数将具有未定义的行为。

【讨论】:

  • 取消所有之前的评论 - 你有一个很好的创新解决方案。
  • @chux 你什么意思?
  • "取消所有以前的评论" --> 我以前的 cmets - 你可能已经看到,错误地报告了你的好答案中的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-23
  • 2022-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多