复制printf函数|浮点数

时间:2019-07-14 14:32:32

标签: c printf

我正在尝试自行在C中重现printf函数。已完成%d,s,c,x,X,o,u,目前正在%f上工作。

我需要使用自己的putchar和putnbr函数。我面临的问题是,putnbr只能打印“。”之前的值,但是我还需要打印“。”之后的剩余值。请在下面查看我的代码 感谢您的帮助!

void    ft_putchar(char c)
{
    write (1, &c, 1);
}

void    ft_putnbr(int nb)
{
    if (nb < 0)
    {
        nb = -nb;
    }
    if (nb >= 10)
    {
        ft_putnbr(nb / 10);
        ft_putnbr(nb % 10);
    }
    else
        ft_putchar(nb + '0');
}


void    handle_f(const char *format, va_list list, int i)
{
    float number;

    number = va_arg(list, double);
    if (format[i] == '%' && format[i + 1] == 'f') 
    {
        ft_putnbr(number);
    }
}

void    ft_printf(const char *format, ...)
{
    int i;
    va_list list;

    i = 0;
    va_start(list, format);

    while (format[i] != '\0')
    {
        if (format[i] == '%')
        {
            if (format[i + 1] == 'f')
            {
                handle_f(format, list, i);
                i = i + 2;
            }
            i--;
        }
        else
            write(1, &format[i], 1);
        i++;
    }
    va_end(list);
}

int main()
{

    float float1 = 10.1011012;
    float float2 = 125.1011012;
    printf("Printf output:\n");
    printf("Hello %f %f\n", float1, float2);
    printf("ft_printf output:\n");
    ft_printf("Hello %f %f \n", float1, float2);

    return (0);
}

Printf输出: 您好10.101101 125.101

ft_printf输出: 你好10125

0 个答案:

没有答案