2011-04-03 17 views
6

¿Es posible imprimir (a stdout, o un archivo) un número (int, float, double, long, etc.) sin tener que utilizar ninguna de las funciones (*printfprintf, fprintf, sprintf, snprintf, vsprintf, ...)?impresión de un número sin usar * printf

+4

'' float' y double' no son números enteros. – dreamlax

+0

¿Por qué lo necesitarías? – gnud

+1

posible duplicado de [¿Cómo se imprime un número IEEE754 (sin printf)?] (Http://stackoverflow.com/questions/4274926/how-do-you-print-out-an-ieee754-number-without- printf) –

Respuesta

7

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

itoa() aplicación de C Programming Language, 2nd Edition - Kernighan and 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); 
} 
+2

OP debe tener en cuenta que esto no existe en Linux. Si desempolva K & R y va a la página 56, verá una implementación. –

+0

Buena idea, e implementar itoa no es demasiado difícil tampoco: http://codepad.org/fUlU6thO – hiobs

+0

Por desgracia, incluso K & R no maneja INT_MIN .. – lowq

2

Basta con utilizar la función de escritura() y formatear la salida de uno mismo.

3

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

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

     n -= 10 * a; 
     iprint(a); 
     } 
    putchar('0'+n); 
    } 
0

Asumo la mayoría de las personas que vienen a través de esta pregunta, ya que han escrito sus propias funciones tx serie y necesitan imprimir algunos números. Deberá modificar la llamada de 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 en orden inverso.

+0

La pregunta no era cómo imprimir un número en reversa. Fue como imprimir un número. –

2

esto resultaría 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)); 
} 
Cuestiones relacionadas