Посчитать значение функции в заданной точке с помощью ряда Тейлора

помогите пожалуйста разобраться, почему при вводе переменных x,eps(при вводе нецелых) у меня ломается программа?

#include "stdio.h"
#include "locale.h"
#include "stdlib.h"
#include "math.h"

typedef double(*function1)(double);
typedef double(*function2)(double, int);

int fact(int n)
{
    int i, t = 1;
    for (i = 1; i <= n; i++)
        t = t * i;
    return t;
}

double cos1(double x)
{
    return 1;
}

double cos2(double x, int i)
{
    return ((pow(-1, i) * pow(x, 2 * i)) / fact(2 * i));
}

double func(function1 fun1, function2 fun2, double x, double eps, int *k, double rf, int n)
{
    double f1, sum, r;
    f1 = fun1(x);
    sum = f1;
    r = fabs(rf - sum);
    while ((r > eps) && (*k < n))
    {
        sum = (sum + fun2(x, (*k)));
        (*k)++;
        r = fabs(rf - sum);
    }
    return sum;
}


void menu()
{
    printf("Расчёт значений функций в заданной точке с помощью разложения в ряд Тейлора\n");
    printf("MENU\n");
    printf("1.cos(x)\n");
    printf("2.ch(x)\n");
    printf("3.ln(1+x)\n");
    printf("4.Выход\n");
}

void main()
{
    setlocale(LC_ALL, "Russian");
    double rf; // эталонное значение
    double f; // вычислительная оценка
    double x; // аргумент функции
    double eps; // точность 
    double k; // кол-во слагаемых
    int n;
    int t = 4;
    while (t != 0)
    {
        menu();
        scanf_s("%d", &t);
        k = 1;
        switch (t)
        {
            case 1:
            {
                printf("cos(x)\n");
                printf("введите x \n");
                scanf_s("%lf", &x);
                printf("введите число элементов ряда \n");
                scanf_s("%d", &n);
                printf("введите точность вычислений \n");
                scanf_s("%lf", &eps);
                rf = cos(x);
                f = func(cos1, cos2, x, eps, &k, rf, n);
                printf("эталонное значение %.10f \n", rf);
                printf("вычислительная оценка %.10f \n", f);
                printf("разница между оценкой и эталонным значением %.10f \n", fabs(rf - f));
                printf("количество слагаемых %d \n", k);
                break;
            }
}

Ответы (0 шт):