请问我的代码有什么问题,我这样写的两个循环套起来是不是不对呀,不对的话要怎么改

任务描述
编写程序,输入一个较小的实数deta,利用e=1+1/1!+1/2!+1/3!+⋯+1/n!计算e的近似值,直到最后一项的绝对值小于deta时为止,输出此时e的近似值.

输入格式:
一个较小的实数deta(deta<0.01)。

输出格式:
题目要求的近似值。

输入样例:
0.0001
输出样例:
2.7182787698


#include 

int main() {
    int a, i, j;
    double b = 1, c = 1;
    double date;
    scanf("%d", &date);
    while (date <= b) {
        i = 1;
        i++;
        for (j = i; j > 0; j--) {
            b = b / j;
        }
        c = c + b;
        b = 1;
    }
    printf("%.8f\n", c);
    return 0;
}

1.题目中是deta不是date,输出例需小数点后10位
2.泰勒级数第一项和第二项都是1,但是意义不同;
第一项的1:在累加时直接设sum初始值为1即可;
第二项的1:是分子为1,分母累乘的结果
3.由于分子都为1,则只需要对分母做累乘即可
4.你的每次while循环,b最终赋值都为1,(date<=b)这句就没意义了啊

#include <stdio.h>
int main()
{
    int i=1;
    double a=1,e=1,sum=1;
    float deta; 
    scanf("%f",&deta);
    while(e>=deta)
    {
        a=a*i;
        e=1.0/a;
        sum=sum+e;
        i++;
    }
    printf("%.10f",sum);
    return 0;
}

img

修改如下,供参考:

#include <stdio.h>
#include <math.h>
int main()
{
    int  i = 1;
    double data, t = 1.0, s = 1.0;
    scanf("%lf", &data);
    while (fabs(1.0 / t) > data)
    {
        t*= i;
        s += 1.0 / t;
        i++;
    }
    printf("%.10f", s);
    return 0;
}