Imprimiendo un número sin usar * printf

¿Es posible imprimir (a la stdout estándar, o un archivo) un número ( int , float , double , long , etc.) sin usar ninguna de las funciones *printf ( printf , fprintf , sprintf , snprintf , vsprintf , …)?

Si su libc contiene una función itoa() , puede usarla para convertir un número entero en una cadena.
De lo contrario, tendrás que escribir el código para convertir un número en una cadena.

itoa() de C Programming Language, 2ª edición – Kernighan y Ritchie página 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); } 

Bueno, no es difícil de hacer para los enteros, pero el trabajo es un poco más complicado para los números de punto flotante, y alguien ya ha enviado un puntero a una explicación para eso. Para los enteros, puedes hacer algo como esto:

 void iprint(int n) { if( n > 9 ) { int a = n / 10; n -= 10 * a; iprint(a); } putchar('0'+n); } 

Simplemente use la función write () y formatee la salida usted mismo.

Esto resultaría en el orden correcto:

 void print_int(int num){ int a = num; if (num < 0) { putc('-'); num = -num; } if (num > 9) print_int(num/10); putc('0'+ (a%10)); } 

Supongo que la mayoría de las personas que se encuentran con esta pregunta porque han escrito sus propias funciones de transmisión serial y necesitan imprimir algunos números. Deberá modificar la llamada putc para que se ajuste a su configuración.

 void print_int(int num) { if (num < 0) { putc('-'); num = -num; } else if (num == 0) { putc('0'); return; } while (num != 0) { putc ('0'+ (num%10)); num /= 10; } } 

Esto imprimirá un número al revés.