c函数不返回结果

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 (

我最近开始学习C语言,所以我意识到我的问题很基本,但如果有任何帮助,我将不胜感激

我试图获取函数fact以将res值返回main,但是当我在main中打印结果时,我只得到0。通过插入一些print语句,我可以看到res在fact例程中正确计算,但结果没有正确返回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;
}
#包括
无符号长事实(整数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,因为我建议使用调试器。你们都知道一句古老的格言:给一个人一条鱼,你会喂他一天。教一个人钓鱼,你会喂他一辈子。