elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Acceder de forma individual a cada digito de un número entero(sin sprintf)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Acceder de forma individual a cada digito de un número entero(sin sprintf)  (Leído 2,671 veces)
DanielPy

Desconectado Desconectado

Mensajes: 145



Ver Perfil
Acceder de forma individual a cada digito de un número entero(sin sprintf)
« en: 15 Noviembre 2013, 22:46 pm »

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:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <limits.h>
  4. #include <ctype.h>
  5.  
  6. int main(void) {
  7. int numero, i, longitud, ok = 0, ch;
  8. char cad[11];
  9.  
  10. do{
  11. system("cls");
  12. printf("\n Ingresa un numero entero(maximo %d)....: ", INT_MAX);
  13.        ok = scanf("%d", &numero) == 1 && numero >= 1 && numero <= INT_MAX;
  14.        while ((ch = getchar()) != EOF && ch != '\n');
  15. }while(!ok);
  16. sprintf(cad,"%d",numero);
  17. longitud = strlen(cad);
  18.  
  19. for(i = 0; i < longitud; i++){
  20. printf("\n Posicion[%d] %c ", i+1, cad[i]);
  21. }
  22.  
  23.        return 0;
  24. }

Bueno eso es todo.-
Un saludo.
Daniel


« Última modificación: 21 Noviembre 2013, 19:54 pm por DanielC# » En línea

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

Desconectado Desconectado

Mensajes: 157



Ver Perfil
Re: Acceder de forma individual a cada digito de un número entero(sin sprintf)
« Respuesta #1 en: 15 Noviembre 2013, 23:05 pm »

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

Código:
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.


En línea

"The programmers of tomorrow are the wizards of the future" - Gave Newel
DanielPy

Desconectado Desconectado

Mensajes: 145



Ver Perfil
Re: Acceder de forma individual a cada digito de un número entero(sin sprintf)
« Respuesta #2 en: 16 Noviembre 2013, 01:45 am »

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.-

Código
  1. #include <stdio.h>
  2.  
  3. int main(void) {
  4.    int numero, digito = 0;
  5.    numero = 125483;
  6.    printf("\n El numero es: %d -- ", numero);
  7.    while(numero != 0){
  8.        digito = numero%10;
  9. printf("%d ", digito);
  10. numero = numero/10;
  11.    }
  12.  
  13.    return 0;
  14. }

Un saludo.
Daniel

« Última modificación: 21 Noviembre 2013, 19:53 pm por DanielC# » En línea

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


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Acceder de forma individual a cada digito de un número entero(sin sprintf)
« Respuesta #3 en: 16 Noviembre 2013, 01:57 am »

lo 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:
Código
  1. 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
En línea

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

Desconectado Desconectado

Mensajes: 145



Ver Perfil
Re: Acceder de forma individual a cada digito de un número entero(sin sprintf)
« Respuesta #4 en: 16 Noviembre 2013, 02:36 am »

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

« Última modificación: 21 Noviembre 2013, 19:53 pm por DanielC# » En línea

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.-
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[AYUDA] Warning: sprintf() [function.sprintf]: Too few arguments
PHP
Rudy21 3 5,470 Último mensaje 30 Julio 2008, 15:51 pm
por Ertai
Calculado el dígito dos mil billones del número pi « 1 2 »
Noticias
wolfbcn 15 6,069 Último mensaje 19 Septiembre 2010, 15:26 pm
por Karcrack
Detectar si un numero es entero o no « 1 2 »
Programación C/C++
Caster 11 6,235 Último mensaje 2 Noviembre 2012, 13:37 pm
por BatchianoISpyxolo
Recorrer integer dígito por dígito
Programación C/C++
Daor02 3 13,186 Último mensaje 20 Junio 2016, 16:54 pm
por tincopasan
Cómo borrarse de algunos servicios de Google de forma individual
Noticias
wolfbcn 0 1,255 Último mensaje 19 Enero 2017, 21:20 pm
por wolfbcn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines