这是我用C语言生成Pascal三角形的代码。
#include<stdio.h>
#include<conio.h>
void main()
{
int i, n, c;
scanf("%d", &n);
for (i = 0; i < n; i++)
{
for (c = 0; c <= (n - i - 2); c++)
printf(" ");
for (c = 0; c <= i; c++)
printf("%ld", factorial(i) / (factorial(c)*factorial(i - c)));
printf("\n");
}
getche();
}
long factorial(int n)
{
int c;
long res = 1;
for (c = 1; c <= n; c++)
res = res*c;
return(res);
}
编译时会显示两个错误:
“因子”的冲突类型&#39;
以前隐含的'阶乘&#39;在这里
这里我的错误是什么?
答案 0 :(得分:1)
'factorial'的冲突类型
先前隐含的'factorial'声明就在这里
两个错误都指一件事:函数factorial
应在使用前声明
只需在main
之前移动定义,或在main
之前为其写一个声明。
我不会为你写详细的解释,因为已经有一些,例如What is the difference between a definition and a declaration?
答案 1 :(得分:0)
在定义之前,您在factorial
中使用了main
。这在C语言中是合法的,但会使编译器猜测您的函数返回int
。但是,当达到factorial
的定义时,编译器会注意到它实际上返回long
,这会导致错误。
您可以通过两种方式解决此问题:
交换main
和factorial
或
通过添加factorial
,在定义main
之前引入long factorial(int n);
的前瞻性声明。