【发布时间】:2020-06-25 22:52:59
【问题描述】:
我正在尝试测试我最近学到的这种方法(按值调用),但由于我不知道的原因,代码不起作用,有人可以解释一下为什么吗? (顺便说一下乱七八糟的)
#include <stdio.h>
#include <stdlib.h>
void fact(int i);
int main() {
int x;
scanf("%d", x);
//function called:
fact(x);
printf("value of x! = %d", x);
return 0;
}
//factorial definition:
void fact(int i){
int j=0;
for(i=1; j>1; j--){
i= i * j;
return;
}
}
【问题讨论】:
-
您希望
fact做什么?你永远不会返回一个值,所以i和j的值在函数退出时会丢失。此外,您在fact的循环的第一次迭代期间立即返回,我怀疑这是预期的行为。 -
如果你的编译器让你摆脱了像
scanf("%d", x);这样明显的错误,你应该弄清楚如何启用它的警告和错误,以便它可以保护你。一个适当配置的编译器根本不会构建这样的代码。 -
感谢您的回答。我想我应该返回 'i' 变量。
-
您不能将 i 用作要相乘的值和 j 循环的限制。我建议您将另一个变量作为您正在计算的值并返回它,而不是 i。 (也可能值得考虑返回 long 而不是 int,因为阶乘会很快变大。)
-
user495758 要明确
scanf("%d", x);不是 错误。不编译将启用所有警告是错误。我们都会犯其他错误。
标签: c factorial pass-by-value unsigned-integer function-definition