2

我最近开始学习 C,所以我意识到我的问题是非常基础的,但任何帮助将不胜感激。

我试图让函数 fact 将 res 值返回给 main,但是当我在 main 中打印出结果时,我只得到 0。通过插入一些打印语句,我可以看到 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;
}
4

2 回答 2

8

您的循环条件是n >= 0,这意味着res在函数返回之前将乘以 0。因此结果将始终为 0。

于 2013-01-12T18:39:25.000 回答
7

你的循环条件是错误的。最后一次运行while (n>=0)将有n=0。乘以res它会将其重置为 0。

您可以通过将循环更改为来解决此问题while (n > 1)

为了将来参考,您可以使用调试器(例如 GDB 或 Visual Studio Express)调查此类问题。或者通过printf在代码中添加语句来跟踪流程,并查看res程序中的值是如何变化的。

于 2013-01-12T18:40:00.603 回答