c - 使用 write 递归打印数字 c

标签 c recursion numbers read-write

我做了一个使用 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/

相关文章:

types - 这种模式似乎很详尽,但我仍然收到警告

java - 使用 BigInteger 和递归求 A 的 B 次方

c++ - 这个递归函数在 C++ 中是如何运行的?

javascript - 如何将数字插入数组?

javascript - 在文本区域中显示行号

c - 如何在 C 中的不同条件下打开不同的 URL(在网络浏览器中)?

c++ - 数据文件的 ld 使数据大小成为 *ABS* 而不是整数

c - C中的字符串解析。将字符串的一部分复制到另一个字符串

objective-c - 在 Objective-C 中处理整数

c - linux上不解析/proc/cpuinfo获取CPU型号名称