我正在编写一个简单的程序来查找第一个'n'整数的阶乘。但是在编译时我遇到了这个错误。甚至认为fact()函数的返回类型是long int,错误仍然存在。
#include <stdio.h>
#include <stdlib.h>
int main(){
int i;
for(i=0;i<30;i++)
printf("%ld\n", fact(i));
return 0;
}
long int fact(int n){
if(n==0)
return 1;
else
return (long)(n*fact(n-1));
}
错误:
fourth.c:7:3: warning: format ‘%ld’ expects argument of type ‘long int’, but argument 2 has type ‘int’ [-Wformat=]
printf("%ld\n", fact(i));
^
fourth.c: At top level:
fourth.c:11:10: error: conflicting types for ‘fact’
long int fact(int n){
^
fourth.c:7:19: note: previous implicit declaration of ‘fact’ was here
printf("%ld\n", fact(i));
^
答案 0 :(得分:8)
您需要提供fact
long int fact(int n);
int main(){
// body
}
long int fact(int n) {
// body
}
如果没有这个,ansii C假定一个没有事先声明或实现的函数将返回int
答案 1 :(得分:1)
您忘记在main
之前添加函数原型。要么包含原型
long int fact(int n);
或在main
之前移动您的函数定义。
#include <stdio.h>
#include <stdlib.h>
long int fact(int n){
if(n==0)
return 1;
else
return (n*fact(n-1));
}
int main(){
int i;
for(i=0;i<30;i++)
printf("%ld\n", fact(i));
return 0;
}