首先你的p没有初始值1,且是int型,所以返回的并不是long型,scanf里面不能加\n
#include
long fact(int n)
{
int i; long p=1;
if(n>0) //这里添加判断以免出现小于1的现象
for(i=1;i<=n;i++)
p=p*i;
else printf("程序出错!k必须大于r!");
return p;
}
int main()
{
int k,r;
printf("输入k,r:\n");
scanf("%d%d",&k,&r);
printf("r=%d,k=%d",k,r);
double s;
s=fact(k)/(fact(r)*fact(k-r));//若k-r<1,会出错
printf("\nC(%d,%d)=%lf\n",k,r,s);
}