【问题标题】:C : Create a function to diplay number just with "write" functionC:创建一个函数来显示数字只是用“写”功能
【发布时间】:2014-08-31 07:25:13
【问题描述】:

我如何编写一个基本函数,只使用#include<unistd.h>中包含的“write”函数来显示一个数字?

示例:

ft_putnbr.c

int ft_putnbr(int nbr)
{
    write(1, &nbr, sizeof(int));
    return (0);
}

int ft_putchar(char c)
{
    write(1, &c, 1);
    return (0);
}

main.c

int     ft_putnbr(int nbr);
int     ft_putchar(char c);

int     main(void)
{
    ft_putnbr(6);
    ft_putchar('\n');
    ft_putchar('a');
    return (0);
}

ft_putchar 工作正常,但我想用我的“ft_putnbr”函数对数字做同样的事情。

我在编译或执行软件时没有错误,但显示的是空白而不是我的号码。

【问题讨论】:

  • 我看到有一些投票要关闭为unclear。他的问题有什么不清楚的地方?他有最小化的可编译代码,他说明了预期输出和实际输出,并指出了有问题的函数。

标签: c unistd.h


【解决方案1】:

您必须将int 转换为char* 表示(ASCII 转换)。例如:

int nbr = 1234;
char str[16]; /* max size expected: 15 digits + 1 null character */
sprintf(str, "%d", nbr);

然后:

write(1, str, strlen(str));

你需要包括这些:

#include <stdio.h>
#include <string.h>

【讨论】:

  • 15 位数字? 32 位整数有 10 位(+符号) 64 位整数有 20 位(+符号)。我猜平均是 15 :p
  • 这只是一个例子,他可以根据自己的需要进行调整
【解决方案2】:

我用这个:

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

【讨论】:

    【解决方案3】:

    这个也检查 int_min 和 int_max

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-24
      • 1970-01-01
      • 1970-01-01
      • 2019-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多