Programación General > C++ Builder

 quien me puede decir cual es la falla en mi programa?

(1/1)

yofeiro:
hola a todos, soy nuevo en esto de la programación, y en un libro de programacion (deitel c++) viene un ejercicio que dice asi: escriba un programa que intruduzca un numero de 5 digitos, y que separe el numero en sus digitos individuales de la forma: 12345 en 1  2  3  4  5, lo hice y funciona pero solo para numeros menores a 32768 (de lo que me di cuenta despues de estar introduciendo numeros) ya que exactamente en ese numero me los empieza a dar asi -3 -2 -7 -6 -8 y si introduzco 32769 me regresa -3 -2 -7 -6 -7 y asi... este es mi codigo les agradecieria su ayuda.

#include<stdio.h>
#include<conio.h>

void main()

{


int num,num1,num2,num3,num4,num5;

   printf("Introduce un numero de 5 digitos");
   scanf("%i",&num);

   num1=num/10000;
   num2=num%10000;
   num2=num2/1000;
   num3=num%1000;
   num3=num3/100;
   num4=num%100;
   num4=num4/10;
   num5=num%10;
   printf("n%i   %i   %i   %i   %i", num1,num2,num3,num4,num5);
}

m0skit0:
Es es porque el tipo int sólo admite valores entre -32769 y 32768, ya que es un valor de 16 bits. Es decir, 16 bits con signo no dan más de sí. Si quieres que te detecte cualquier número de 5 cifras, usa el tipo long.

Aparte, usa un array, es mucho más sencillo y más elegante:


--- Código: C ---#include <stdio.h>#include <conio.h>#include <math.h> // "main" devuelve int en C, ponlo siempre asiint main(int argc, char* argv[]){    // El numero introducido    long num = 0;     // Leemos el numero    printf("Introduce un numero de 5 digitos positivo: ");    scanf("%lu",&num);        // Comprobamos que el numero introducido es valido    if (num >0 and num <=99999)    {               // El array que contiene cada cifra de "num" en una posicion        int cifras[5];                // Extraemos las cifras        for(i=0;i<5;i++)        {                       cifras[i] = (num % pow(10,i+1))/ pow(10, i);                    }                // Mostramos las cifras desde la mas significativa hasta la menos significativa        for(i=4;i>=0;i--)        {            printf("%d ", cifras[i]);        }                printf("n");    }    else    {        printf("Error: el numero tiene mas de 5 cifrasn");    }     // Fin de "main", volvemos al sistema    return 0;} Lo he almacenado en un array para que veas cómo es, pero si sólo es mostrar los números no tendrías por qué almacenarlo en un array, sino simplemente hacer printf sobre la expresión que extrae el número.

Saludos

PD: no lo he probado, así que si ves que no funciona o te lanza algún error de compilación, avísame  :P

yofeiro:
Muchas gracias me sirvió de mucho tu ayuda... :D

Navegación

[0] Índice de Mensajes

Ir a la versión completa