代码之家  ›  专栏  ›  技术社区  ›  Shashaank

在HackerBank中上传我的代码时出现编译器错误

  •  1
  • Shashaank  · 技术社区  · 2 年前

    编译代码时出现编译器错误。

    问题是从用户那里为固定数量的数字中的每一个找到最大的素数

    我犯的错误-

    Solution.c: In function ‘largest_prime_factor’:
    Solution.c:35:1: error: control reaches end of non-void function [-Werror=return-type]
     }
     ^
    cc1: some warnings being treated as errors
    

    我的代码

    #include <math.h>
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <assert.h>
    #include <limits.h>
    #include <stdbool.h>
    
    int largest_prime_factor(int a);
    int check_prime(int b);
    
    int main() {
        int t; 
        scanf("%d", &t);
        for (int a0 = 0; a0 < t; a0++) {
            long n; 
            scanf("%ld", &n);
            printf("%d\n", largest_prime_factor(n));
        }
        return 0;
    }
    
    int largest_prime_factor(int a) {
        if (check_prime(a) != 1) {
            for (int i = a - 1; i > 1; i--) {
               if (a % i == 0) {
                    a = i;
               }
            }
            
            largest_prime_factor(a);
       }
       else {
           return a;
       }
    }
    
    int check_prime(int b) {
        int s = (int)sqrt(b);
        for (int i = 2; i <= s; i++) {
            if (b % i == 0) {
                return 0;
            }
        }
        return 1;
    }
    
    1 回复  |  直到 2 年前
        1
  •  2
  •   UpAndAdam    2 年前

    问题正是编译器错误所说的问题所在;在里面 largest_prime_factor 函数,并不是所有路径都有返回。在的一个案例中 if 递归调用,当递归完成时没有返回值。在你返回的另一条道路上 a 。你需要在所有途径上都有回报。

    更直观:

    int largest_prime_factor(int a) {
        if (check_prime(a) != 1) {
            for (int i = a - 1; i > 1; i--) {
               if (a % i == 0) {
                    a = i;
               }
            }
            
            largest_prime_factor(a);
            // You need to return something here perhaps return largest_prime_factor(a)
       }
       else {
           return a;
       }
    }