-1

这是我用 C 语言生成帕斯卡三角形的代码。

#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);
}

编译时显示两个错误:

  • “阶乘”的冲突类型

  • 先前隐含的“阶乘”声明在这里

我的错误是什么?

4

2 回答 2

1

'factorial' 的冲突类型
以前的'factorial' 隐式声明在这里

这两个错误都与一件事有关:函数factorial应在使用前声明。
只需将定义移到之前main或在之前为其编写声明main

我不会为您写详细的解释,因为已经有一些,例如定义和声明之间有什么区别?

于 2014-10-10T07:17:43.763 回答
0

factorialmain定义它之前,您正在使用它。这在 C 中是合法的,但会使编译器猜测您的函数返回一个int. 但是,当达到 的定义时factorial,编译器注意到它实际上返回了 a long,这会导致错误。

您可以通过两种方式解决此问题:

  1. 交换mainfactorial或的定义

  2. 通过添加factorial在定义之前引入前向声明。mainlong factorial(int n);

于 2014-10-10T07:18:46.963 回答