我如何编写一个基本的函数,只是用#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”函数对一个数字做同样的事情。
当我编译或执行软件时没有错误,但显示的是一个空白而不是我的数字。
5条答案
按热度按时间acruukt91#
您必须将
int
转换为char*
表示(ASCII转换)。例如:然后:
你需要包括这些:
rjee0c152#
我用这个:
xzv2uavs3#
这一个也检查int_min和int_max
huus2vyu4#
库putnbr()
我们在公共图书馆中没有任何类似的函数,我们只是使用printf。
ft_putnbr
这个函数将在标准输出上显示整数n。这个函数类似于
ft_itoa
函数,因为我们将递归地执行它。我们将把整数作为一个整体分解为单个的个位数,我们将把这些整数转换为字符。我们将使用ft_putchar函数在标准输出上显示这些字符。所以这个函数不需要返回任何值。但是需要number来完成它的使命。我们将像这样声明函数:
在函数体中,我们首先查看传入参数的int是否等于-2147483648。2147483648这个数字是int变量可能容纳的最大数字。当负号放在它前面时,我们的函数无法处理它。所以我们检查是否给出了负版本,如果是,我们立即返回它
因此,如果nbr不等于-2147483648,我们将检查另一个条件,如果nbr是负数。如果number是last than 0 .我们将立即使用ft_putchar(-)显示标准输出的减号。我们将调用ft_putnbr()再次对变量n的负版本。在数学中-(-5)= 5,因此我们将使用此www.example.com使其为正Method.so我们将这样做:
如果我们给定的数字不是负数,那么我们将移动到下一个else if,并且我们将检查该数字是否大于或等于10。如果是,则我们开始递归地将该数字分解为每个单独的数字,然后我们将其转换为字符。所以我们将使用
10
的除法和10
的模数。除以10将使我们进一步进入递归,直到我们最终到达int中的第一个数字。如果您查看模数10,我们使用a + 48将数字转换为char值。虽然这看起来会立即将其放入标准输出,我们将在这个数字上使用ft_putchar来在标准输出上显示它,然后通过我们的递归进行回溯,直到每个数字都被显示出来。备注:
如果你在理解recusion方面有任何困难,你应该在一张纸上写出这个函数将采取的步骤。
这是我的完整代码
为了测试我的代码,我将使用这个简单的main函数
nwo49xxi5#
你可以使用递归:
然而,在我看来,更优雅、更简单的方法是使用
for()
或while()
循环:正如你所看到的,这两种解决方案都只需要
write(int fd, const void *buf, size_t nbyte)
函数<unistd.h>。while循环解决方案,通过删除第一个while循环,它也将打印前导0。希望这对你有帮助!