我正在写一个用于练习的阶乘函数.在Main上,我声明变量并按如下方式调用它:
int main(){
unsigned long n = 0;
scanf("%lu", &n);
unsigned long result = factorial(n);
printf("%lu \n", result);
return 0;
}
它起作用了,并给出了我想要的结果.但我觉得它看起来有点糟糕,所以我这样重构了它:
int main(){
unsigned long n = 0;
printf("%lu \n", factorial(scanf("%lu", &n)));
}
不管怎么说,结果都是1.为什么?以下是阶乘函数,以防万一:
unsigned long factorial(unsigned long n){
if(n == 1){
return n;
}
else if(n <= 0){
printf("No factorial for negative numbers");
}
else{
return (n * factorial(n - 1));
}
return 0;
}
我在Python上做了同样的练习,并以同样的方式格式化了函数调用,结果它工作了,所以我很困惑为什么C不接受它.它不是先调用函数的函数(scanf,然后factorial,然后是printf)吗?