Acceder de forma individual a cada digito de un número entero(sin sprintf)

Iniciado por DanielPy, 15 Noviembre 2013, 22:46 PM

0 Miembros y 1 Visitante están viendo este tema.

DanielPy

Hola a todos.
Esta es la manera que estoy usando para poder acceder de forma individual a cada unos de los dígitos de un número, alguien sabe si se puede hacer lo mismo pero a mano o sea sin usar sprintf.- :huh: :huh: :huh:

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <ctype.h>

int main(void) {
int numero, i, longitud, ok = 0, ch;
char cad[11];

do{
system("cls");
printf("\n Ingresa un numero entero(maximo %d)....: ", INT_MAX);
       ok = scanf("%d", &numero) == 1 && numero >= 1 && numero <= INT_MAX;
       while ((ch = getchar()) != EOF && ch != '\n');
}while(!ok);
sprintf(cad,"%d",numero);
longitud = strlen(cad);

for(i = 0; i < longitud; i++){
printf("\n Posicion[%d] %c ", i+1, cad[i]);
}

       return 0;
}


Bueno eso es todo.-
Un saludo.
Daniel
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-

xaps

Para obtener el último dígito de un número entero (N) puedes hacer:


int N;
//Obtenemos el valor de N
int numero = N%10;
N = N/10;


Lo que estás haciendo aquí es obtener el último dígito de N aplicándole módulo 10. Después, acortamos ese número una cifra por la derecha, eliminando el número que ya hemos separado. Si este fragmento de código se coloca dentro de un bucle, consigues obtener todos los dígitos de un número N.
"The programmers of tomorrow are the wizards of the future" - Gave Newel

DanielPy

Hola xaps.
Excelente por lo menos es un comienzo, lo que resta es saber cómo acceder
Por ejemplo al 3 teniendo el siguiente número 12345 sin pasar por el resto,
Si lo tenes por favor ayudame.-

#include <stdio.h>

int main(void) {
   int numero, digito = 0;
   numero = 125483;
   printf("\n El numero es: %d -- ", numero);
   while(numero != 0){
       digito = numero%10;
printf("%d ", digito);
numero = numero/10;
   }

   return 0;
}


Un saludo.
Daniel

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-

rir3760

Cita de: DanielC# en 16 Noviembre 2013, 01:45 AMlo que resta es saber cómo acceder
Por ejemplo al 3 teniendo el siguiente número 12345 sin pasar por el resto
Lo mejor es obtener cada uno de los dígitos mediante división y modulo como ya te comento xaps, esos dígitos los almacenas en un array para procesarlos después pero si lo piensas un poco estas haciendo de forma manual la misma operación que sprintf.

En cuanto al uso de esa función si el numero esta garantizado a ser positivo y lo imprimes con "%d" puedes ahorrarte la llamada a strlen utilizando:
longitud = sprintf(cad, "%d", numero);
Ya que el valor de retorno de sprintf es el numero de caracteres de la cadena generada sin contar el '\0'.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

DanielPy

Hola.
muchas gracias a los 2 por la ayuda, me quedare con sprintf, en cuanto a lo que decís que estoy haciendo lo mismo que con sprintf, eso lo tengo claro solo que me gusta saber cómo funcionan por dentro ciertas funciones.-

Un saludo.
Daniel

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-