C - long double和printf问题

时间:2015-09-25 22:15:54

标签: c printf long-double

我是新的C程序员,我正在开展一个学校项目,我必须近似值或pi。我的教授表示我们必须使用long double声明所有整数项。控制台显示我询问用户在给定函数时接近pi的项数。我输入1作为术语数,但代码返回-0.00000000而不是4.00000000。

#include <stdio.h>
#include <math.h>

long double approx1(int terms)
{
    long double pi = 0;
    long double num = 4;
    long double denom = 1;
    int i;

    for(i=1; i <= terms; i++)
    {
        if(i%2 != 0)
        {
            pi=pi+(num/denom);
        }
        else
        {
            pi=pi-(num/denom);
        }
        denom = denom + 2;
    }
     printf("%.8Lf\n", pi);
}

int main()
{
    int terms;
    long double pie;

    printf("input number of terms, input 0 to cancel\n");
    scanf("%d", &terms);

    while(terms != 0)
    {
        if(terms > 0)
        {
            pie = approx1(terms);
            printf("%.8Lf\n", pie);
            printf("GG mate\n");
            break;
        }
        else
        {
            printf("Incorrect input, please enter a correct input\n");
            scanf("%d", &terms);
        }
    }
}

我没有成功地让它发挥作用(虽然它适用于漂浮)。我究竟做错了什么? (我正在使用包含编译器btw的代码块。)

1 个答案:

答案 0 :(得分:5)

您忘了在return函数中添加approx1()语句。如果你使用了return语句,如果你使用了返回的值,就会调用undefined behavior

引用C11标准,章节§6.9.1

  

如果到达了终止函数的},则使用函数调用的值   调用者,行为未定义。