【问题标题】:c function not returning resultc函数不返回结果
【发布时间】:2012-12-27 03:02:08
【问题描述】:

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

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

【问题讨论】:

  • while 循环的最后一次迭代中,n 的值是多少?
  • 这个很容易通过调试发现

标签: c function return


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • +1 但是while (n &gt; 1) 会更好,因为乘以 1 是没有用的。
    • 希望我能再次 +1 以建议使用调试器。你们都知道那句古老的格言:给一个人一条鱼,你会喂他一天。授人以渔,养其一生。
    猜你喜欢
    • 1970-01-01
    • 2011-12-27
    • 2020-07-04
    • 1970-01-01
    • 1970-01-01
    • 2019-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多