C/C++ 代码不适用于 DEV C++。 (浮点或类型)

标签 c recursion floating-point factorial dev-c++

#include<stdlib.h>
#include<stdio.h>

long double fact(unsigned long int n)
    /*The factorial of a positive integer by recursion*/
{
    if (n==0)
        return 1;
    else
        return n*fact(n-1);
}

int main()
{
    long double  sum, n;
    int i, m;
    printf("\t/*Code to find the approximate value of e */");
check:
    printf("\n\n\tPlease Enter the value of n := ");
    scanf("%lf", &n);
    sum=0;
    for (i=0; i<=n; i++)
        sum +=1/(fact(i));
    printf("\n\n\tThe appriximate value of e := %.15lg\n\n\t", sum);
    printf("Let's do this again? 1/ YES Any key/ NO := ");
    scanf("%d", &m);
    if (m==1)
        goto check;
    else (1);
    return 0;
}

此代码在 Visual C++ 2010 中运行得非常好,但在 DEV C++ 中却不行。它不断地为 e 的值返回零。有人可以解释一下原因吗!谢谢!

最佳答案

使用这个scanf("%Lf", &n); long double的格式说明符是%Lf,%le,%lg 所以使用这个

还要考虑这些点

Dev-C++ 它使用 GCC (MinGW)。任何 Dev-C++ 更新都无法解决此问题。

  1. Dev-C++已经5年没有更新了;不要屏住呼吸。

  2. 保留了衍生的 wxDev-C++。

  3. 如果您想要编译器更新,请访问 www.mingw.org,并希望最新版本仍然可以与古老的 Dev-C++ 一起使用。或者使用不同的 IDE 或编译器。我推荐 VC++ 2010 Express Edition(免费,并且是一个更好的调试器),您的代码可以像 VC++ 2008 中一样工作,但这并不意味着它是安全的。

  4. 您如何确定该值为“0”?它实际上很可能是 0.000001 之类的东西,而你的询问方法对其进行了四舍五入。您应该在调试器中查看该值,而不是打印语句。不幸的是,Dev-C++ 的调试器很糟糕。

  5. ISO C 标准库仅定义 double 函数。如果您想要为 float 定义版本,则需要编译为 C++ 并包含 . C 不支持函数重载,因此在 C 中如果没有不同名称的函数就不可能做到这一点。

关于C/C++ 代码不适用于 DEV C++。 (浮点或类型),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10463587/

相关文章:

c++ - 无法打开包含文件错误

java - 递归搜索错误

python - 为什么我的递归冒泡排序不起作用?

c - C 中的回文递归程序

javascript - 如何在 JavaScript 中将字符串转换为 float 而不需要 parseFloat 或转换?

c - 不弹出控制台窗口是否可行?

c - fork-exec-dup 后没有返回终端提示

c - 动态二维数组特定行的意外输出

c - 将 float 转换为 double 如何工作?

在c中将char转换为float