c - 错误: control reaches end of non-void function:(

标签 c recursion return

我知道之前已经有人问过这个问题,但我仍然找不到解决方案。该程序应该使用递归对数字中的所有偶数位求和。这是产生错误 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/

相关文章:

c - 如何在 Linux/C 中将历史日期和时间转换为另一个时区?

java - 递归获取幂集

sql-server-2005 - 错误发生后仍可继续执行程序

Java Streams 返回抛出错误 意外的返回值

c - 为什么在存储分配器中使用循环链表而不是树?

c - 混合 C 和 ASM,皮质 M4

c - 这个声明在 x86-64 上有什么问题?

javascript - 如何在javascript中使用递归打印数组中的元素

java - 逃离有时间限制的递归

java - 设置断点覆盖IntelliJ中某个方法的所有return语句