c函数不返回结果
我最近开始学习C语言,所以我意识到我的问题很基本,但如果有任何帮助,我将不胜感激 我试图获取函数fact以将res值返回main,但是当我在main中打印结果时,我只得到0。通过插入一些print语句,我可以看到res在fact例程中正确计算,但结果没有正确返回main 我肯定我错过了一些非常基本的东西 谢谢c函数不返回结果,c,function,return,C,Function,Return,我最近开始学习C语言,所以我意识到我的问题很基本,但如果有任何帮助,我将不胜感激 我试图获取函数fact以将res值返回main,但是当我在main中打印结果时,我只得到0。通过插入一些print语句,我可以看到res在fact例程中正确计算,但结果没有正确返回main 我肯定我错过了一些非常基本的东西 谢谢 #include <stdio.h> unsigned long fact (int n){ unsigned long res = 1; while (
#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;
}
#包括
无符号长事实(整数n){
无符号长res=1;
而(n>=0)
{
res*=n;
n--;
}
返回res;
}
内部主(空){
int n;
无符号长序列;
printf(“插入编号:\n”);
scanf(“%d”和“&n”);
res=事实(n);
printf(“阶乘数为%lu”,res);
返回0;
}
您的循环条件是n>=0
,这意味着res
将在函数返回之前乘以0。因此,结果将始终为0。您的循环条件是错误的。当(n>=0)最后一次运行时,将具有n=0
。将res
乘以该值将使其重置为0
您可以通过将循环更改为while(n>1)
作为将来的参考,您可以使用调试器(例如GDB或visual studio express)来调查此类问题。或者通过向代码中添加printf
语句来跟踪流,并查看res
的值在程序中是如何变化的。在while
循环的最后一次迭代中n
的值是什么?这可以通过调试+1很容易找到,但是while(n>1)
会更好,因为乘以1是没有用的。希望我能再次+1,因为我建议使用调试器。你们都知道一句古老的格言:给一个人一条鱼,你会喂他一天。教一个人钓鱼,你会喂他一辈子。