Ошибка при генерации треугольника Паскаля

Это мой код для генерации треугольника Паскаля на языке Си.

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

При компиляции он показывает две ошибки:

  • конфликтующие типы для "факториала"

  • предыдущая неявная декларация факториала была здесь

В чем моя ошибка здесь?

2 ответа

Решение

конфликтующие типы для "факториала"
предыдущая неявная декларация факториала была здесь

Обе ошибки относятся к одному: функция factorial должны быть объявлены до использования.
Просто переместите определение до main или напишите декларацию main,

Я бы не стал писать подробные объяснения для вас, поскольку их уже есть, например, в чем разница между определением и объявлением?

Ты используешь factorial в main прежде чем вы определите это. Это допустимо в C, но заставляет компилятор догадываться, что ваша функция возвращает int, Однако при достижении определения factorial, компилятор замечает, что он возвращает, на самом деле, long, что вызывает ошибку.

Вы можете исправить это двумя способами:

  1. Поменяйте местами определения main а также factorial или же

  2. Ввести предварительную декларацию factorial до определения main добавляя long factorial(int n);,

Другие вопросы по тегам