我知道之前已经有人问过这个问题,但我仍然找不到解决方案。该程序应该使用递归对数字中的所有偶数位求和。这是产生错误 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
为奇数时,函数 sum_even_d
将不会到达任何 return
语句。但由于该函数被定义为非 void,因此它必须返回一个值。这就是编译器告诉你的。在第二个片段中,您的 else
语句负责处理此代码路径。
关于c - 错误: control reaches end of non-void function:(,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44930026/