Las cifras que tiene un numero

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

0 Miembros y 2 Visitantes están viendo este tema.

mikel-mb

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


MAFUS

printf("el numero tiene %d cifras \n");
Ahí falta una variable para dar valor a %d

mikel-mb

Ya lo he puesto pero me sigue pasando lo mismo.

MAFUS

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.

josue9243

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

josue9243

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

mikel-mb

He copiado tu codigo en visual studio y tambien me devuelve numeros muy grandes. Tal vez sea problema de mi visual...

josue9243

Y la verdad que si, es tu VC, ami me anda d10, lo testee todo.

MAFUS

Me reafirmo en mi respuesta: en sucesivos bucles no reseteas cont, por eso crece sin control.

josue9243

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.