网站上的程序错误,但不是代码块

时间:2017-02-11 17:24:03

标签: c arrays codeblocks

我正在进行竞争编码,并且在网站上即黑客我的程序给出了“错误控制到达非空函数的结尾[-Werror = return-type]”但是在代码块上它工作得很好这里是我的代码。< / p>

#include <math.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
#include <limits.h>
#include <stdbool.h>
int count_max_freq(int *a,int n,int i)
{   static int max_freq=0,index;
    int t=a[i],f=0;
    for(int j=i;j<n;j++)
        if(a[i]==a[j])
            f++;
    if(max_freq<f)
    {   max_freq=f;
        index=i;
    }
    if(i<n)
        count_max_freq(a,n,i+1);
    else
        return a[index];
}
int main(){
    int n;
    scanf("%d",&n);
    int *types = malloc(sizeof(int) * n);
    for(int types_i = 0; types_i < n; types_i++){
       scanf("%d",&types[types_i]);
    }
    // your code goes here
    printf("%d",count_max_freq(types,n,0));
    return 0;
}

1 个答案:

答案 0 :(得分:2)

其中一条返回路径不会返回任何内容(递归路径),因此会发出警告。

它运作的事实仅仅是运气(不确定你所谓的工作:“它编译”并不意味着“它正常运行”,而且可以仅靠运气而我不会赌它)

我的建议:取代:

if(i<n)
    count_max_freq(a,n,i+1);  // should return the value!
else
    return a[index];

通过三元表达式,所以你只有一个return语句,没有警告,它可以在任何地方使用:

return (i<n) ? count_max_freq(a,n,i+1) : a[index];