elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Prevenir la introducción de un valor de punto flotante en un entero
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Prevenir la introducción de un valor de punto flotante en un entero  (Leído 3,646 veces)
greenchar

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Prevenir la introducción de un valor de punto flotante en un entero
« en: 25 Agosto 2011, 23:00 pm »

Resulta que tengo un problema, tengo una variable entera, al introducir un numero que sea por ejemplo, .1, el programa, al momento de ejecutar se cicla y no hay manera de pararlo(solo con Ctrl + c). Eh intentado un montón de cosas pero ninguna funciona. :huh:
No eh podido implementar una excepción, intente con sentencias if, bucles while, del tipo "si n no es mayor que cero, no ejecutes", pero lo único que consigo es lo que esta en la screenshot de abajo. :-(
Aqui esta el pedazo de código en donde quiero implementar el "filtro":
Código
  1. int main(){
  2. /* PEDIR ELEMENTOS */
  3.  int n=0;
  4.  printf("numero de elementos para el vector:\n");
  5.  scanf("%d", &n);
  6. }


Horriblemente se cicla...

Gracias de antemano. :)



En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Prevenir la introducción de un valor de punto flotante en un entero
« Respuesta #1 en: 26 Agosto 2011, 01:11 am »

Supongo el lenguaje de programación es C, ¿Correcto?

Si es así puedes utilizar la función strtol (prototipo en <stdlib.h>) para validar la entrada del usuario. Un ejemplo de su uso se encuentra en este mensaje.

Un saludo


En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Karman


Desconectado Desconectado

Mensajes: 673



Ver Perfil WWW
Re: Prevenir la introducción de un valor de punto flotante en un entero
« Respuesta #2 en: 26 Agosto 2011, 02:52 am »

Resulta que tengo un problema, tengo una variable entera, al introducir un numero que sea por ejemplo, .1, el programa, al momento de ejecutar se cicla y no hay manera de pararlo(solo con Ctrl + c). Eh intentado un montón de cosas pero ninguna funciona

en windows no pasa nada, solo retorna la parte entera (0), de todas formas, fijate si esta solución (media rara) te sirve:

Código
  1. int n=0;float f;
  2. printf("numero de elementos para el vector: ");
  3. do{
  4.  scanf("%f",&f);
  5.  if(f!=(int)f)
  6.    printf("el número no es entero, ingrese un número entero: ");
  7. }while(f!=(int)f);
  8. n=f;

S2
En línea

criskapunk

Desconectado Desconectado

Mensajes: 277



Ver Perfil
Re: Prevenir la introducción de un valor de punto flotante en un entero
« Respuesta #3 en: 26 Agosto 2011, 05:53 am »

El código no es mio, sino una mera traducción a C de algo que vi en otro foro, espero te sirva.

Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5. int n;
  6. int f = 0; // Flag
  7. float num;
  8.  
  9.  
  10. while (f == 0)
  11. {
  12. printf("Ingrese un numero: ");
  13. scanf("%f", &num);
  14. n = (int)num;
  15.     if ((n - num) == (float)0)
  16.     {
  17.       f = 1;
  18.        printf("El numero es entero\n");
  19.       break;
  20.     } else
  21.     {
  22.       f = 0;
  23.       printf("El numero es decimal\n");
  24.     }
  25.   }
  26.   printf("%d", n);
  27.  
  28.   return 0;
  29. }
  30.  

Un saludo.
« Última modificación: 26 Agosto 2011, 05:58 am por R0LFback » En línea

pucheto

Desconectado Desconectado

Mensajes: 215


Ver Perfil
Re: Prevenir la introducción de un valor de punto flotante en un entero
« Respuesta #4 en: 26 Agosto 2011, 06:27 am »

El código no es mio, sino una mera traducción a C de algo que vi en otro foro, espero te sirva.
Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5. int n;
  6. int f = 0; // Flag
  7. float num;
  8.  
  9.  
  10. while (f == 0)
  11. {
  12. printf("Ingrese un numero: ");
  13. scanf("%f", &num);
  14. n = (int)num;
  15.     if ((n - num) == (float)0)
  16.     {
  17.       f = 1;
  18.        printf("El numero es entero\n");
  19.       break;
  20.     } else
  21.     {
  22.       f = 0;
  23.       printf("El numero es decimal\n");
  24.     }
  25.   }
  26.   printf("%d", n);
  27.  
  28.   return 0;
  29. }
  30.  

Un saludo.
Por problemas de la precisión que tiene el tipo float, podria llegar a dar que un numero es decimal, cuando es entero. Lo mismo con el codigo de karman.

Lo mejor q se puede hacer en este caso es leer el input como un string, validar que sea lo que quiere, y despues, en caso de que sea valido, realizar las conversiones que correspondan.
En línea

criskapunk

Desconectado Desconectado

Mensajes: 277



Ver Perfil
Re: Prevenir la introducción de un valor de punto flotante en un entero
« Respuesta #5 en: 26 Agosto 2011, 14:11 pm »

@pucheto
Si, eso es verdad. En el código que publiqué si se llega a ingresar un número con 7 o más cifras decimales lo toma como entero, por ejemplo el 10.0000001 lo toma como entero, pero no conozco tanto de C todavía :xD

Un saludo.
En línea

Karman


Desconectado Desconectado

Mensajes: 673



Ver Perfil WWW
Re: Prevenir la introducción de un valor de punto flotante en un entero
« Respuesta #6 en: 26 Agosto 2011, 14:34 pm »

Por problemas de la precisión que tiene el tipo float, podria llegar a dar que un numero es decimal, cuando es entero. Lo mismo con el codigo de karman.

Lo mejor q se puede hacer en este caso es leer el input como un string, validar que sea lo que quiere, y después, en caso de que sea valido, realizar las conversiones que correspondan.

si, es cierto (por eso aclaré que era una solución rara), pero para el tipo de problema (obtener un número dentro de un rango acotado) utilizaría esa solución, ahora si hay problemas de precisión incluso podría usar "double" para estirar un poco más su funcionalidad, me parece que comprobar/realizar conversiones es más para problemas más complejos (que requieran justamente más precisión)

S2
« Última modificación: 26 Agosto 2011, 14:43 pm por Karman » En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: Prevenir la introducción de un valor de punto flotante en un entero
« Respuesta #7 en: 26 Agosto 2011, 21:42 pm »

¡Buenas!

Normalmente, al leer elementos de uno en uno, cuando pasan cosas de estas scanf retorna 0 (cero elementos leidos), asi que puedes utilizar este codigo:

Código
  1.  
  2. while(!scanf("%d",&numero)) //mientras no lea un entero
  3.    while(getchar() != '\n'); //terminamos de ller la linea para poder leer un entero de nuevo
  4. getchar(); //y terminamos leyendo el salto de linea que queda al final de la linea
  5.  
  6.  

¡Saludos!
En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
greenchar

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Prevenir la introducción de un valor de punto flotante en un entero
« Respuesta #8 en: 3 Enero 2012, 19:30 pm »

Me habia quedado con la duda pero la solucion de do-while funciona perfectamente, muchas gracias a todos!!  :)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
¿Cual es el limite de un numero con punto flotante (en programacion)?
Foro Libre
danielo- 4 7,863 Último mensaje 16 Septiembre 2010, 01:49 am
por Franki
necesito ayuda con punto flotante
Dudas Generales
urvreak 0 1,958 Último mensaje 29 Junio 2011, 21:43 pm
por urvreak
TextBox que solo acepta números enteros o de punto flotante [¿Aporte?]
.NET (C#, VB.NET, ASP)
Xavelets 3 7,996 Último mensaje 21 Septiembre 2011, 23:38 pm
por Xavelets
Entero por coma flotante
Programación General
psycho248 4 2,472 Último mensaje 15 Mayo 2014, 05:50 am
por psycho248
[Pregunta]: ¿Cómo saber si es un ENTERO o FLOTANTE en PHP?
Desarrollo Web
Leguim 2 2,178 Último mensaje 13 Mayo 2021, 01:10 am
por Danielㅤ
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines