salto linea leer imprimir espacios espacio escribir con como caracteres cadenas cadena blanco c formatting printf digits

linea - leer espacios en c



Insertar espacios entre los dígitos en C (6)

Como ''jamesdlin'' ha mencionado en su comentario, el enfoque de GMan funcionaría; sin embargo, tendrá que almacenarlo en un búfer para imprimir en el orden correcto (su algoritmo imprimirá "6 5 4 3 2 1" para la entrada 123456). En este punto, diría que sería mucho más simple usar sprintf como ''sugerido'' en su respuesta (si esto no es una asignación de clase de algoritmo, por supuesto).

En mi opinión, la forma más sencilla de hacerlo sería usar la recursión, de esta manera puede imprimir los dígitos en el orden correcto sin utilizar los búferes.

La implementación recursiva es muy simple:

void PrintfRecursivly(int number) { if (number < 0) { number *= -1; printf("- "); } if (number > 10) { PrintfRecursivly(number / 10); printf(" "); } printf("%d", number % 10); } int main() { int number = -78900456; PrintfRecursivly(number); return 0; }

Entrada:

-78900456

Salida:

- 7 8 9 0 0 4 5 6

EDITAR : Gracias a Steve Jessop, quien me sugirió un algoritmo correcto para enteros positivos mientras estaba fuera. Cambié el método anterior para imprimir correctamente para todas las entradas (positivas y negativas), sin el último espacio.

Tenga en cuenta que podemos evitar verificar los valores negativos en cada recursividad, haciendo la comprobación solo una vez (en la función principal o donde sea) pero no lo escribí porque perderíamos más en claridad que en rendimiento.

¿Cómo tomaría un número como 123456 y lo imprimiría como 1 2 3 4 5 6 ?


Esto solo funciona para enteros sin signo:

#include <stdio.h> #include <math.h> void print_number(unsigned int number) { int n = number, c = 0, p; while (n > 0) { n /= 10; c++; } for (n = c - 1; n >= 0; n--) { p = pow(10, n); printf("%d ", number / p); number -= number / p * p; } printf("/n"); } int main(int argc, char *argv[]) { print_number(1); print_number(12); print_number(123); print_number(1234); print_number(12345); print_number(1234567); print_number(12345678); print_number(123456789); return 0; }


La forma más simple de hacer esto (aunque no la más rápida) probablemente sería primero sprintf el número de un buffer de cadena, y luego recorrer el buffer printf -ing un carácter y un espacio a la vez.

No hay una forma integrada de hacerlo en el formato estándar de printf .


Un método común sería extraer cada dígito y luego imprimir ese dígito. No le daré el código, pero es la versión implementada de:

int d; // your number /* While `d` is not zero */ /* Modulus `d` with 10 to extract the last digit */ /* Print it, with your space */ /* Divide by 10 to remove the last digit */ /* Repeat */

Esto será al revés. Lo dejaré como un ejercicio para que arregles eso. (Sugerencia: en el ciclo, coloque el resultado en una matriz de caracteres, y cuando termine comience en el último índice de la matriz e imprima al revés).


char buffer[50]; int myNum = 123456; int n; int i; n = snprintf(buffer, sizeof buffer, "%d", myNum); for (i = 0; i < n; i++) { putchar(buffer[i]); putchar('' ''); } putchar(''/n'');


int number = 123456; char strNumber[64]; strNumber[0] = ''/0''; sprintf_s(strNumber, "%d", number); int i = 0; while(strNumber[i] != ''/0'') printf("%c ", strNumber[i++]);