Test Foro de elhacker.net SMF 2.1

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:


#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>

int cifras(num1, 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)
{
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");
cont2++;
}
else
{
printf("introduce un numero positivo \n");
cont2 = 0;
}
}
printf("pulse enter para finalizar...");
getchar();
return 0;


}

int cifras(num1, cont)
{

while (num1 / 10 > 0)
{
num1 = num1 / 10;
cont++;
}
return cont;
}

Título: Re: Las cifras que tiene un numero
Publicado por: MAFUS en 8 Noviembre 2017, 18:37 PM
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.

int cifras( int num1, int cont);

int main( )
{
int Roberto = 555;

int num1 = 0;
  int cont = 1;
  int numeros = 0;
  int cont2 = 0;

  int first = 0;
  char str[128];
  printf("Cuantos numeros va a introducir? \n");
  fgets(str, 128, stdin);
  sscanf(str, "%d", &numeros);
  while (cont2 < numeros)
  {
     printf("introduce un numero: \n");
     fgets(str, 128,stdin);
     sscanf(str,"%d" , &num1);
 printf( str );
     if (num1 > 0)
     {
        cont = cifras(num1, cont);

if( first )
cont++;

        printf("el numero tiene %d cifras \n", cont);
cont = 0;
first++;
        cont2++;
     }
     else
     {
        printf("introduce un numero positivo \n");
        cont2 = 0;
     }
  }
  printf("pulse enter para finalizar...");
  getchar();

system( "PAUSE" );
return 0;
}

int cifras( int num1, int cont)
{
 
  while (num1 / 10 > 0)
  {
     num1 = num1 / 10;
     cont++;
  }
  return cont;
}
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
Cita de: MAFUS en 11 Noviembre 2017, 00:32 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
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í:
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!!!