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);
}