我用下列程序算e结果是0.0000000,检查不出错误了,求纠错

#include<stdio.h>
#include<math.h>
//function protype
void menu (void);
void clear_input_queue();
void e_formula_a(int n);

int main()
{
menu ();
}

void menu(void)
{
char ch;
int n;
printf(":)Welcome to the experiments of Euler's constant e\n");
printf(":)The system is able to chose four different formulas to compute e\n");
printf(":)Please pick a choice shown on the menu\n");
select:
printf("====================Menu====================\n");
printf("a. Use formula (a) to compute e.\n");
printf("b. Use formula (b) to compute e.\n");
printf("c. Use formula (c) to compute e.\n");
printf("d. Use formula (d) to compute e.\n");
printf("e. Print e.\n");
printf("f. Some action\n");
printf("q. Quit\n");
printf("========================================\n");
inputway: //输入a-f或者q选择计算方式
ch = getchar();
clear_input_queue();
if ((ch<'a'||ch>'f')&&(ch!='q'))
{
printf("please enter the character in 'a' to 'f' or 'q'. \n");
goto inputway;
}
else
{
printf("I'd like %c\n",ch);//测试是否输入正确的范围是否能正常运行
}
switch(ch)
{
case 'a':
printf("Then you choose formula a to calculate e\n");
e_formula_a(n);
goto select;
case 'b':
printf("Then you choose formula b to calculate e\n");
break;
goto select;
case 'c': printf("Then you choose formula c to calculate e\n");
break;
goto select;
case 'd': printf("Then you choose formula d to calculate e\n");
break;
goto select;
case 'e': printf("e\n");
break;
goto select;
case 'f': printf("Some action\n");
break;
goto select;
case 'q':
printf("========================================");
printf("Quit\n");
break;
}
}

void clear_input_queue()//清空队列
{
while(getchar()!='\n')
continue;
}

void e_formula_a(

参考:

#include <stdio.h>
long long jc(int n)
{
    long long s = 1;
    int i;
    for(i=1;i<=n;i++)
        s*=i;
    return s;
}
double power(int n)
{
    double s=1.0;
    int i=0;
    for(;i<n;i++)
        s/=10;
    return s;
}
 
void printlongf(double e,int k)
{
    switch(k)
    {
    case 1:
        printf("%.1lf",e);break;
    case 2:
        printf("%.2lf",e);break;
    case 3:
        printf("%.3lf",e);break;
    case 4:
        printf("%.4lf",e);break;
    case 5:
        printf("%.5lf",e);break;
    case 6:
        printf("%.6lf",e);break;
    case 7:
        printf("%.7lf",e);break;
    case 8:
        printf("%.8lf",e);break;
    case 9:
        printf("%.9lf",e);break;
    case 10:
        printf("%.10lf",e);break;
    case 11:
        printf("%.11lf",e);break;
    case 12:
        printf("%.12lf",e);break;
    case 13:
        printf("%.13lf",e);break;
    case 14:
        printf("%.14lf",e);break;
    case 15:
        printf("%.15lf",e);break;
    case 16:
        printf("%.16lf",e);break;
    case 17:
        printf("%.17lf",e);break;
    case 18:
        printf("%.18lf",e);break;
    }
}
 
int main()
{
    double e=0;
    double r2=1,ex;
    int k;
    char c ;
    while(1)
    {
        c = getchar();
        if(c>=1 && c<=18)
            break;
    }
    ex = power((int)c)/2;
    k = 0;
    while(1)
    {
        r2 = (double)(9*k*k+1)/jc(3*k);
        if(r2 < ex )
            break;
        e += r2;
        k++;
    }
    
    printlongf(e,(int)c);
    return 0;
}


e_formula_a(n);这个函数代码要贴出来啊,e你是在哪里输出的呢

你好,我应该可以帮助你,但是需要看下e formula的函数

我昨天写的时候就发现了这个问题,long double输出使用%Lf,有些编译器是不支持的,,如果你用的是mingw,你试着把printf改成__mingw_printf();