Las cifras que tiene un numero

Iniciado por mikel-mb, 8 Noviembre 2017, 15:24 PM

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

mikel-mb

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

josue9243

Ya te di el código solucionado, compilalo en otro programa, devc++ codeblocks, vc++ 2010 no sé.

MAFUS

Introduce entre la línea 17 y 18 una nueva con la instrucción: cont = 1;

mikel-mb


MAFUS


mikel-mb

#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;
}

MAFUS

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.

mikel-mb

de esa forma ni me saca el numero.

MAFUS

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

mikel-mb

Todo solucionado gracias a todos!!!