不使用*printf打印数字

hio*_*obs 7 c

是否可以打印(到stdout,或文件)的数量(int,float,double,long,等)实际上并没有使用任何的*printf功能(printf,fprintf,sprintf,snprintf,vsprintf,...)?

Thi*_*ter 7

如果您的libc包含一个itoa()函数,您可以使用它将整数转换为字符串.
否则,您必须编写代码以自己将数字转换为字符串.

itoa()从执行C语言程序设计(第二版) - Kernighan和Ritchie第64页:

/* itoa: convert n to characters in s */
void itoa(int n, char s[])
{
   int i, sign;

   if ((sign = n) < 0)  /* record sign */
      n = -n;           /* make n positive */
   i = 0;
   do {  /* generate digits in reverse order */
      s[i++] = n % 10 + '0';  /* get next digit */
   } while ((n /= 10) > 0);   /* delete it */
   if (sign < 0)
      s[i++] = '-';
   s[i] = '\0';
   reverse(s);
}
Run Code Online (Sandbox Code Playgroud)

  • OP应该知道Linux上不存在这种情况.如果他把K&R弄脏并转到第56页,他会看到一个实现. (2认同)

swe*_*rup 5

嗯,对于整数来说并不难,但是对于浮点数来说,这项工作要复杂一些,而且有人已经发布了一个指向解释的指针。对于整数,您可以执行以下操作:

void iprint(int n)
  { 
    if( n > 9 )
      { int a = n / 10;

        n -= 10 * a;
        iprint(a);
      }
    putchar('0'+n);
  }
Run Code Online (Sandbox Code Playgroud)