我编写了一个程序来求和数组中的元素。然而,当我编译程序时,它告诉我"控制可能到达非void函数的末尾"。我不知道为什么。
//a program to sum the elements of an array
#include <stdio.h>
int sum(int array[],int n)
{
int sum =0, *ptr;
int *arrayend=array +n;
for(ptr=array; ptr<arrayend;++array)
{
sum +=*ptr;
return sum;
}
}
int main(void)
{
int sum(int array[],int n);
int value[10]={1,2,3,4,5,6,7,8,9,10};
printf("The sum is %in",sum(value,10));
return 0;
}
您的函数sum()
格式不正确,假设for循环条件在第一次尝试时失败,并且您从未进入循环,则会出现不返回任何内容的情况,并且您的函数返回类型为int
因此,这种情况需要解决,这样即使您未能进入循环,也应该在循环后返回。
循环中的返回没有任何意义,除非存在返回所基于的条件。
每次执行循环体时都尝试return sum
,但函数只返回一次。因此,在循环的第一次迭代中,函数将返回。这和没有循环是一样的。
您需要将return sum
放在循环之后,这样您的循环才有意义。即首先将*ptr
添加到sum
n次,然后返回生成的sum
。
此外,在循环中执行++array
。可能应该是++ptr
。