C 从数组中查找最大数的代码

C 从数组中查找最大数的代码,c,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(

我编写了以下代码来从一个数字数组中查找最大数。显然,我的代码中有一个错误。这是一个分段错误。请帮我确认一下

#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);
}
#包括
void max(int n,int A[n]);
int main()
{
int n;
int A[n];
max(n,A[n]);
}
最大无效值(整数n,整数A[n])
{
printf(“输入数组中所需的元素数\n”);
scanf(“%d”和“&n”);
int i;
printf(“输入数组中的元素\n”);
对于
main()
中的(i=0;i),您声明了
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);
并从
max()
中删除
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);
}
#包括
#包括
void printMax(int n,int A[]);
int main()
{
尺寸;
printf(“输入数组中所需的元素数\n”);
如果(scanf(“%zu”,&n)!=1){
fprintf(标准“输入错误”);
}
如果(n最大值)
max=A[i];
printf(“%d”,最大值);
}

n
未初始化。数组已单元化。您希望它做什么?它如何单元化?
n
等于..什么?
A
被填充..什么?哦,我看到您试图在函数中执行此操作。但是在设置数组之前,您使用
n
对数组进行“分配”。
void max(int n,int A[n]);…int n;int A[n];max(n,A[n]);
表示编译代码时未启用警告。
max(n,A[n])
尝试将一个
int
作为指针传递。节省时间,启用所有警告。我没有收到您的通知。请详细说明我已经更新了postAs as an,可能值得考虑将填充数组的代码移动到一个单独的方法
填充数组
,再次将n和a传递给该方法。这使得nse比实际用于查找最大值的函数更准确。因此很可能默认为0-不,这不太可能。@LordWilmore这也可能是一个非常大的数字溢出堆栈。Minor:
size\u t n;
int n;
更正确,但对于学习者来说
int
是可以的。它是混合的
 int n;…size\u t i
为清晰起见,应解析为一种类型。@chux.:是的,这是一个好主意..制作
n
size\t是一个想法。更改了代码。希望这有意义
#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);
}