我的任务是创建一个函数来显示作为参数输入的数字。该函数必须能够显示int
类型变量中所有可能的值。write()
是唯一允许的函数。
void ft_putchar(char c)
{
write(1, &c, 1);
}
void ft_putnbr(int nb)
{
if (nb < 0)
{
ft_putchar('-');
ft_putchar(-nb + '0');
}
if ( nb > 0)
{
ft_putchar(nb + '0');
}
}
我写了这个,但是很明显它不适用于两位或两位以上的整数,我怎么把它们显示为字符串呢?
3条答案
按热度按时间kpbwa7wx1#
write是唯一允许的函数。
更通用的解决方案是使用循环来处理10、100等。尝试除以10的最大幂,然后除以该幂的1/10,等等。
要处理所有的
int
有点棘手。要小心执行-INT_MIN
的代码,因为这是 undefined behavior(UB)。相反,在打印符号后使用int
的负边,因为负int
比正int
多。通过test harness。
46scxncf2#
候选解决方案的测试工具:
预期产出
q7solyqu3#
递归解决方案。
它还避免了
-INT_MIN
。