我最近开始学习C语言,所以我意识到我的问题非常基础,但是非常感谢任何帮助。
我正在尝试将函数事实返回到main的res值,但是当我在main中打印出结果时我得到0.通过插入一些print语句我可以看到res在事实中正确计算例程但结果没有正确返回到main。
我确定我在这里遗漏了一些非常基本的东西。
由于
#include <stdio.h>
unsigned long fact (int n){
unsigned long res = 1;
while ( n >= 0 )
{
res *= n;
n--;
}
return res;
}
int main (void){
int n;
unsigned long res;
printf("Insert number:\n");
scanf("%d", &n );
res = fact (n);
printf("The factorial number is %lu", res);
return 0;
}
答案 0 :(得分:8)
您的循环条件为n >= 0
,这意味着在函数返回之前res
将乘以0。因此结果将始终为0.
答案 1 :(得分:7)
你的循环条件错了。最后一次while (n>=0)
将有n=0
。将res
乘以此将其重置为0.
您可以通过将循环更改为while (n > 1)
为了将来参考,您可以使用调试器(例如GDB或visual studio express)调查此类问题。或者通过在代码中添加printf
语句来跟踪流程,并查看res
的值如何通过程序进行更改。