Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: mikel-mb en 8 Noviembre 2017, 15:24 pm



Título: Las cifras que tiene un numero
Publicado por: mikel-mb en 8 Noviembre 2017, 15:24 pm
Buenos días, he escrito un código que tenia que hacer para clase y cuando depuro me salen números muy grandes. Alguien sabe porque? Gracias de ante mano. Aqui dejo el código en C:

Código
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include<stdio.h>
  3. #include<math.h>
  4.  
  5. int cifras(num1, cont);
  6. int main()
  7. {
  8. int num1 = 0;
  9. int cont = 1;
  10. int numeros = 0;
  11. int cont2 = 0;
  12. char str[128];
  13. printf("Cuantos numeros va a introducir? \n");
  14. fgets(str, 128, stdin);
  15. sscanf(str, "%d", &numeros);
  16. while (cont2 < numeros)
  17. {
  18. printf("introduce un numero: \n");
  19. fgets(str, 128,stdin);
  20. sscanf(str,"%d" , &num1);
  21. if (num1 > 0)
  22. {
  23. cont = cifras(num1, cont);
  24. printf("el numero tiene %d cifras \n");
  25. cont2++;
  26. }
  27. else
  28. {
  29. printf("introduce un numero positivo \n");
  30. cont2 = 0;
  31. }
  32. }
  33. printf("pulse enter para finalizar...");
  34. return 0;
  35.  
  36.  
  37. }
  38.  
  39. int cifras(num1, cont)
  40. {
  41.  
  42. while (num1 / 10 > 0)
  43. {
  44. num1 = num1 / 10;
  45. cont++;
  46. }
  47. return cont;
  48. }
  49.  
  50.  


Título: Re: Las cifras que tiene un numero
Publicado por: MAFUS en 8 Noviembre 2017, 18:37 pm
Código:
printf("el numero tiene %d cifras \n");
Ahí falta una variable para dar valor a %d


Título: Re: Las cifras que tiene un numero
Publicado por: mikel-mb en 8 Noviembre 2017, 19:45 pm
Ya lo he puesto pero me sigue pasando lo mismo.


Título: Re: Las cifras que tiene un numero
Publicado por: MAFUS en 9 Noviembre 2017, 18:30 pm
Te lo digo:
Fíjate que no reinicias la variable cont en cada bucle por tanto parte del valor que tenía en la interación anterior.


Título: Re: Las cifras que tiene un numero
Publicado por: josue9243 en 9 Noviembre 2017, 23:45 pm
No es mejor poner un cout y std, obtenerlo en un char buffer[500]; y luego usar atoi( )?...

Después haces esto:

if( valor >= 0 && valor <= 9) cifras = 1;
if( valor >= 10 && valor <= 99) cifras = 2;
if( valor >= 100 && valor <= 999) cifras = 3;

y asi sucesivamente :v ( si querés te armo algo mejor :3 y sin poner tantos if xD. )


Título: Re: Las cifras que tiene un numero
Publicado por: josue9243 en 10 Noviembre 2017, 00:13 am
Corregi2

el first lo puse xq el tuyo al poner un segundo numero no se porque le restaba uno, y al primero no xD.

Código
  1. int cifras( int num1, int cont);
  2.  
  3. int main( )
  4. {
  5. int Roberto = 555;
  6.  
  7. int num1 = 0;
  8.   int cont = 1;
  9.   int numeros = 0;
  10.   int cont2 = 0;
  11.  
  12.   int first = 0;
  13.   char str[128];
  14.   printf("Cuantos numeros va a introducir? \n");
  15.   fgets(str, 128, stdin);
  16.   sscanf(str, "%d", &numeros);
  17.   while (cont2 < numeros)
  18.   {
  19.      printf("introduce un numero: \n");
  20.      fgets(str, 128,stdin);
  21.      sscanf(str,"%d" , &num1);
  22.  printf( str );
  23.      if (num1 > 0)
  24.      {
  25.         cont = cifras(num1, cont);
  26.  
  27. if( first )
  28. cont++;
  29.  
  30.         printf("el numero tiene %d cifras \n", cont);
  31. cont = 0;
  32. first++;
  33.         cont2++;
  34.      }
  35.      else
  36.      {
  37.         printf("introduce un numero positivo \n");
  38.         cont2 = 0;
  39.      }
  40.   }
  41.   printf("pulse enter para finalizar...");
  42.   getchar();
  43.  
  44. system( "PAUSE" );
  45. return 0;
  46. }
  47.  
  48. int cifras( int num1, int cont)
  49. {
  50.  
  51.   while (num1 / 10 > 0)
  52.   {
  53.      num1 = num1 / 10;
  54.      cont++;
  55.   }
  56.   return cont;
  57. }


Título: Re: Las cifras que tiene un numero
Publicado por: mikel-mb en 10 Noviembre 2017, 15:44 pm
He copiado tu codigo en visual studio y tambien me devuelve numeros muy grandes. Tal vez sea problema de mi visual...


Título: Re: Las cifras que tiene un numero
Publicado por: josue9243 en 10 Noviembre 2017, 16:12 pm
Y la verdad que si, es tu VC, ami me anda d10, lo testee todo.


Título: Re: Las cifras que tiene un numero
Publicado por: MAFUS en 11 Noviembre 2017, 00:32 am
Me reafirmo en mi respuesta: en sucesivos bucles no reseteas cont, por eso crece sin control.


Título: Re: Las cifras que tiene un numero
Publicado por: josue9243 en 11 Noviembre 2017, 03:32 am
y yo te reafirmo diciendo que ya se lo corregi :v, y si vas a volver a reafirmar, no reafirmes directamente corregí el código y lesto.


Título: Re: Las cifras que tiene un numero
Publicado por: mikel-mb en 11 Noviembre 2017, 10:07 am
Me reafirmo en mi respuesta: en sucesivos bucles no reseteas cont, por eso crece sin control.

Puedes solucionarlo y lo pruebo?
Gracias de antemano


Título: Re: Las cifras que tiene un numero
Publicado por: josue9243 en 11 Noviembre 2017, 16:15 pm
Ya te di el código solucionado, compilalo en otro programa, devc++ codeblocks, vc++ 2010 no sé.


Título: Re: Las cifras que tiene un numero
Publicado por: MAFUS en 11 Noviembre 2017, 19:07 pm
Introduce entre la línea 17 y 18 una nueva con la instrucción: cont = 1;


Título: Re: Las cifras que tiene un numero
Publicado por: mikel-mb en 12 Noviembre 2017, 19:45 pm
sigue sin funcionar


Título: Re: Las cifras que tiene un numero
Publicado por: MAFUS en 12 Noviembre 2017, 20:01 pm
Vale, muestra lo que tienes.


Título: Re: Las cifras que tiene un numero
Publicado por: mikel-mb en 12 Noviembre 2017, 20:03 pm
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>


int cifras(int num1, int cont);
int main()
{
   int num1 = 0;
   int cont = 1;
   int numeros = 0;
   int cont2 = 0;
   char str[128];
   printf("Cuantos numeros va a introducir? \n");
   fgets(str, 128, stdin);
   sscanf(str, "%d", &numeros);
   while (cont2 < numeros)
   {
      cont = 1;
      printf("introduce un numero: \n");
      fgets(str, 128,stdin);
      sscanf(str,"%d" , &num1);
      if (num1 > 0)
      {
         cont = cifras(num1, cont);
         printf("el numero tiene %d cifras \n", &cont);
         cont2++;
      }
      else
      {
         printf("introduce un numero positivo \n");
         fgets(str, 128, stdin);
         sscanf(str, "%d", &num1);
         cont2 = 0;
      }
   }
   printf("pulse enter para finalizar...");
   getchar();
   return 0;

   
}

int cifras(int num1,int cont)
{
   
   while (num1 / 10 > 0||num1/10==0)
   {
      num1 = num1 / 10;
      cont++;
   }
   return cont;
}


Título: Re: Las cifras que tiene un numero
Publicado por: MAFUS en 12 Noviembre 2017, 21:23 pm
El fallo lo tienes en
Código:
printf("el numero tiene %d cifras \n", &cont);
el apmersand sirve para obtener la dirección de memoria. Lo que ves es eso y no el dato que hay en él, es decir, el número de cifras de cada número. Quita & y listo.


Título: Re: Las cifras que tiene un numero
Publicado por: mikel-mb en 12 Noviembre 2017, 21:27 pm
de esa forma ni me saca el numero.


Título: Re: Las cifras que tiene un numero
Publicado por: MAFUS en 12 Noviembre 2017, 22:34 pm
Dentro de la función int cifras() tienes el while así:
Código:
while (num1 / 10 > 0||num1/10==0)
Cuando num1 sea un número de un solo dígito el resultado será 0, la sentencia num1/10==0 hará que el bucle se repita y 0/10 = 0, por tanto estarás en un bucle infinito.


Título: Re: Las cifras que tiene un numero
Publicado por: mikel-mb en 13 Noviembre 2017, 13:39 pm
Todo solucionado gracias a todos!!!