用于从数组中查找最大数量的代码

时间:2017-12-07 16:28:42

标签: c

我编写了以下代码来查找数字数组中的最大数字。显然我的代码中存在错误。这是一个分段错误。请帮我识别一下。

#include <stdio.h>
void max(int n,int A[n]);

int main()
{
int n;
int A[n];
max(n,A[n]);
}

void max(int n,int A[n])
{
printf("Enter the number of elements you want in your array\n");
scanf("%d",&n);
int i;
printf("Enter the elements  in your array\n");
for(i=0;i<n;i++)
{
    scanf("%d",&A[i]);
}
int max=A[0];
for(i=1;i<n;i++)
{
    if(A[i]>max)
    {
        max=A[i];
    }
}
printf("%d",max);
}

2 个答案:

答案 0 :(得分:3)

int n;
int A[n];

您必须初始化n否则它包含垃圾值。现在在此之后你会遇到未定义的行为。

正确的代码是

#include <stdio.h>
#include <stdlib.h>
void printMax(int n,int A[]);

int main()
{
    size_t n;
    printf("Enter the number of elements you want in your array\n");
    if( scanf("%zu",&n) != 1){
        fprintf(stderr,"Error in input");
    }
    if( n <= 0){
        fprintf(stderr, "%s\n", "Error in input : Enter number >= 0 .");
    }
    int a[n];
    printf("Enter the elements  in your array\n");
    for(size_t i = 0; i < n; i++)
    {
        if( scanf("%d",&a[i]) != 1){
            fprintf(stderr,"%s\n","Error in input");
            exit(1);
        }
    }
    printMax(n,a);
    return 0;
}

void printMax(size_t n,int A[])
{
    int max=A[0];
    for(size_t i = 1; i < n; i++)
        if(A[i] > max)
            max = A[i];

    printf("%d",max);
}

答案 1 :(得分:2)

main()中,您声明n但它没有值,因此可能默认为0.然后声明并定义数组A并将其大小设置为n,正如我所说的那样可能为零。

max()之内,您会读入一个值并将其分配给n,但您的数组A的大小为零。

所以将main()更改为

/* Get the number of items to store in the array */
int n;
printf("Enter the number of elements you want in your array\n");
scanf("%d",&n);

/* Create the array of the given size */
int A[n];

/* Now find the max value in that array */
max(n,A);

n删除max()的设置。