Ошибка при генерации треугольника Паскаля
Это мой код для генерации треугольника Паскаля на языке Си.
#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
, что вызывает ошибку.
Вы можете исправить это двумя способами:
Поменяйте местами определения
main
а такжеfactorial
или жеВвести предварительную декларацию
factorial
до определенияmain
добавляяlong factorial(int n);
,