Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: jgarridc en 11 Noviembre 2015, 19:08 pm



Título: Hola, una ayudita please
Publicado por: jgarridc en 11 Noviembre 2015, 19:08 pm
¿por qué no me funciona éste código?, esta hecho para contar la cantidad de dígitos de un número cualquiera, siempre entero.

Código
  1. #include <stdio.h>
  2. #include <conio.h>
  3.  
  4.  
  5.  
  6. void main(){
  7.  
  8.    int num,cd;
  9.    cd=0;
  10.  
  11.    printf("Introduzca numero: ");
  12.    scanf("%d ", &num);
  13.  
  14.  
  15.        while (num!=0)
  16.            {
  17.  
  18.            num = num/10;
  19.            cd++;
  20.  
  21.        }
  22.        printf("El numero consta de %d digitos", cd);
  23.        system("pause");
  24. }
  25.  


Título: Re: Hola, una ayudita please
Publicado por: avesudra en 11 Noviembre 2015, 19:18 pm
Hola, el código no te funciona porque tienes puesto en el scanf :

Código
  1. scanf("%d ", &num);

En lugar de:

Código
  1. scanf("%d", &num);

El comportamiento de scanf no está definido en ese formato, solo elimina los espacios antes del especificador de formato. Aquí tienes más información:

http://www.cplusplus.com/reference/cstdio/scanf/

El problema es que scanf lee todo lo que has puesto por consola y además lo que queda en el buffer, si tú le añades un espacio es como si estuviese esperando un carácter más, por eso no funciona. Date cuenta de que si pones cualquier numero y luego cualquier otro, el programa funciona, pero de forma incorrecta.

Un saludo.


Título: Re: Hola, una ayudita please
Publicado por: jgarridc en 11 Noviembre 2015, 19:22 pm
Joer, muchísimas gracias Avesudra me estaba volviendo loco, estoy aprendiendo a programar en C y estoy muy verde, pues eso, mil gracias por tu tiempo y un saludo.


Título: Re: Hola, una ayudita please
Publicado por: avesudra en 11 Noviembre 2015, 19:25 pm
Joer, muchísimas gracias Avesudra me estaba volviendo loco, estoy aprendiendo a programar en C y estoy muy verde, pues eso, mil gracias por tu tiempo y un saludo.

De nada, aquí estamos para eso, ¡mucho ánimo!

PD: Una sugerencia, aunque sé que en algunas Universidades enseñan a trabajar con conio, system("pause") y fflush(stdin) y tendrás que utilizarlo casi por obligación te recomiendo que te pases por aquí:

http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html

Un saludo.


Título: Re: Hola, una ayudita please
Publicado por: jgarridc en 11 Noviembre 2015, 19:39 pm
Muchísimas gracias, estoy estudiando C por mi cuenta, por placer y toda ayuda es poca....gracias de nuevo.


Título: Re: Hola, una ayudita please
Publicado por: furciorifa en 12 Noviembre 2015, 20:38 pm
Ya te respondieron es por el espacio esperado por scanf, te recomiendo igual no utilizar librerías que no sean estándar.