【发布时间】:2017-12-09 08:19:00
【问题描述】:
我知道以前有人问过这个问题,但我仍然找不到解决方法。该程序应该使用递归对数字中的所有偶数求和。这是产生错误control reaches end of non-void function的代码:
#include<stdio.h>
int sum_even_d(unsigned long n);
int main()
{
unsigned long n;
int x;
printf("Enter n : \n");
scanf("%lu",&n);
x=sum_even_d(n);
printf("%d\n",x);
return 0;
}
int sum_even_d(unsigned long n)
{
if(n==0) return 0;
if(n%2==0)
return (sum_even_d(n/10)+n%10);//*error here*//
}
如果我添加一行,程序就可以完美运行。我不明白是什么造成了差异:
#include<stdio.h>
int sum_even_d(unsigned long n);
int main()
{
unsigned long n;
int x;
printf("Enter n : \n");
scanf("%lu",&n);
x=sum_even_d(n);
printf("%d\n",x);
return 0;
}
int sum_even_d(unsigned long n)
{
if(n==0) return 0;
if(n%2==0)
return (sum_even_d(n/10)+n%10);
else return (sum_even_d(n/10));//*added this*//
}
【问题讨论】:
-
如果您没有从声明为返回某些内容的函数中返回任何内容,那么您将有未定义的行为。
-
n%2==1时返回值未确定。 -
说
n=3时你想让函数做什么 -
复制品是C++没关系;在任何其他类似的编程语言中都是一样的