我做了一个使用 write an unsigned int 进行打印的函数:
ssize_t putc_fdr(char c, int fd)
{
return (write(fd, &c, sizeof(char)));
}
ssize_t putuint_fdr(uintmax_t i, int fd)
{
return (i != 0 ? putuint_fdr(i / 10, fd) + putc_fdr(i % 10 + '0', fd) : 0);
}
但它不适用于 i = 0,因为该函数不打印任何内容。
如果我将 ': 0'
替换为 ': putc_fdr('0', fd)'
它将不起作用,因为如果 i > 10,则在递归结束时总是会打印附加的“0”。 (逻辑。)
但是只有开头 i 为 0 时如何打印这个 0 呢?
最佳答案
不要停在零,而是在达到个位数时停止。
并且您应该通过放弃 ?:
运算符来解决排序问题(从而确保正确的打印顺序),并允许您的函数具有较少重复的默认行为:
ssize_t putuint_fdr(uintmax_t i, int fd) {
ssize_t ret1 = 0;
if(i / 10 != 0)
ret1 = putuint_fdr(i / 10, fd);
if (ret1 < 0)
return ret1;
ssize_t ret2 = putc_fdr(i % 10, fd);
if (ret2 < 0)
return ret2;
return ret1 + ret2;
}
关于c - 使用 write 递归打印数字 c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42795053/