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)
| | |-+  caso raro!
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: caso raro!  (Leído 5,042 veces)
0x3c

Desconectado Desconectado

Mensajes: 108


learning, making mistakes, having fun


Ver Perfil
caso raro!
« en: 17 Enero 2013, 13:44 pm »

practicando los ejemplos del libro de C que estoy leyendo pude crear un programa que lo unico que hace es comparar la altura del usuario con la mia(suena bastante estupido lo se) todo funciona bien el programa compila y se ejecuta a la perfeccion :D...sin embargo deberia fallar cuando en vez de recibir un numero recibe una letra cosa que no pasa, habra algun error??

E.P.:se me olvido preguntar si quiero que el programa muestre un error cuando el input es una latra y no un numero como lo puedo hacer?? por ejemplo lo ejecute y le puse 'h' en vez de de un numero del 1 al 9 y el mensaje que recibi fue:

Soy mayor que tu

este es el codigo:

Código:
#include <stdio.h>
#include <stdlib.h>

int main()
{
char feet[2];
int msr;

printf("Di tu altura en pies:");
gets(feet);
msr=atoi(feet);

if(msr>5) printf("Eres mas alto que yo!.\n");
if(msr<5) printf("Soy mas alto que tu!\n");
if(msr==5) printf("Somos de la misma altura!!.\n");

return(0);
}

saludos


« Última modificación: 17 Enero 2013, 13:52 pm por 0x3c » En línea

Si Vis Pacem, Para Bellum.

Another Legend Has Fallen
-- KiLiaN --


Desconectado Desconectado

Mensajes: 1.163


Ju Já!!


Ver Perfil
Re: caso raro!
« Respuesta #1 en: 17 Enero 2013, 13:51 pm »

La altura en pies también son números, prueba a declarar feet como int.


En línea

0x3c

Desconectado Desconectado

Mensajes: 108


learning, making mistakes, having fun


Ver Perfil
Re: caso raro!
« Respuesta #2 en: 17 Enero 2013, 13:57 pm »

creo que para hacer eso deberia de eliminar el uso de atoi()? o no?











saludos y gracias
En línea

Si Vis Pacem, Para Bellum.

Another Legend Has Fallen
-- KiLiaN --


Desconectado Desconectado

Mensajes: 1.163


Ju Já!!


Ver Perfil
Re: caso raro!
« Respuesta #3 en: 17 Enero 2013, 14:07 pm »

La verdad no se que hace atoi() xD pero yo creo que te lo puedes quitar, si la variable feet va a recibir valores con décimales declaralá con float.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6. float feet;
  7.  
  8.  
  9. printf("Di tu altura en pies:");
  10. gets(feet);
  11.  
  12.  
  13. if(feet>5) printf("Eres mas alto que yo!.\n");
  14. if(feet<5) printf("Soy mas alto que tu!\n");
  15. if(feet==5) printf("Somos de la misma altura!!.\n");
  16.  
  17. return(0);
  18. }
En línea

3mp3z@ndo

Desconectado Desconectado

Mensajes: 51


Ver Perfil
Re: caso raro!
« Respuesta #4 en: 17 Enero 2013, 15:07 pm »

Creo que la función isdigit() de la libreria ctype te podría venir bien

Un saludo
En línea

Zelios Ariex

Desconectado Desconectado

Mensajes: 10



Ver Perfil WWW
Re: caso raro!
« Respuesta #5 en: 17 Enero 2013, 15:45 pm »

La verdad no se que hace atoi() xD pero yo creo que te lo puedes quitar, si la variable feet va a recibir valores con décimales declaralá con float.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6. float feet;
  7.  
  8.  
  9. printf("Di tu altura en pies:");
  10. gets(feet);
  11.  
  12.  
  13. if(feet>5) printf("Eres mas alto que yo!.\n");
  14. if(feet<5) printf("Soy mas alto que tu!\n");
  15. if(feet==5) printf("Somos de la misma altura!!.\n");
  16.  
  17. return(0);
  18. }

Lo que hace la función atoi(), es hacer una conversion de string a int, por ejemplo si metes un string que sea: "42" te lo convierte a un int de 42 (almacenandolo en otra variable, claro está)
En línea

0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: caso raro!
« Respuesta #6 en: 17 Enero 2013, 15:52 pm »

@Kilian, esta claro que no has probado a compilarlo xD. Si declaras feet como float, la sentencia:
Código
  1. gets(feet);

Te lanzara un error de compilacion, porque gets() espera un puntero a char.

Saludos.
En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
ankora45

Desconectado Desconectado

Mensajes: 52



Ver Perfil
Re: caso raro!
« Respuesta #7 en: 17 Enero 2013, 16:33 pm »

@Kilian, esta claro que no has probado a compilarlo xD. Si declaras feet como float, la sentencia:
Código
  1. gets(feet);

Te lanzara un error de compilacion, porque gets() espera un puntero a char.

Saludos.

creo que se puede convertir la variable feet a un string y leerlo con fgets() pero si solo quieres un programa sencillo no te compliques la vida xD
En línea

Hay dos cosas infinitas en este mundo, el universo y la estupidez humana, y de la primera no estoy muy seguro
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: caso raro!
« Respuesta #8 en: 17 Enero 2013, 16:37 pm »

todo funciona bien el programa compila y se ejecuta a la perfeccion :D...sin embargo deberia fallar cuando en vez de recibir un numero recibe una letra cosa que no pasa, habra algun error?
El problema se debe a que no verificas el valor de retorno de la función "atoi". Cuando esta función no puede obtener un valor entero en base a la cadena pasada como argumento su valor de retorno es cero. Un detalle: también retorna ese valor si la entrada es "0", una de las razones por las cuales se desaconseja su uso en favor de strtol.

Lo que debes hacer es verificar el mentado valor y si es cero indicar que la entrada no es valida, caso contrario realizas la operación:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(void)
  5. {
  6.   char altura[2];
  7.   int valor;
  8.  
  9.   printf("Di tu altura en pies:");
  10.   fflush(stdout);
  11.   fgets(altura, 2, stdin);
  12.  
  13.   valor = atoi(altura);
  14.   if (valor == 0)
  15.      puts("La entrada no es valida");
  16.   else if (valor > 5)
  17.      puts("Eres mas alto que yo!.");
  18.   else if (valor < 5)
  19.      puts("Soy mas alto que tu!");
  20.   else
  21.      puts("Somos de la misma altura!!.");
  22.  
  23.   return 0;
  24. }

También se debe evitar el uso de gets, en su lugar puedes utilizar fgets. Y por favor lee el tema |Lo que no hay que hacer en C/C++. Nivel basico|.

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
0x3c

Desconectado Desconectado

Mensajes: 108


learning, making mistakes, having fun


Ver Perfil
Re: caso raro!
« Respuesta #9 en: 17 Enero 2013, 17:51 pm »

@rir3760
soy novato en esto de la programacion...en el libro que estoy leyendo dice que gets() y atoi() son funciones inseguras y que no deberian usarse, al menos no en pogramas serios..gracias por la recomendacion :D

tendre que darle una leida al link que pusiste

@todos
gracias por sus sugerencias ademas debo decirles que siempre se me olvida decir que estoy programando bajo GNU/Linux no bajo Windows




saludos
En línea

Si Vis Pacem, Para Bellum.

Another Legend Has Fallen
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
caso raro con disco duro
Hardware
Rnovatis 1 2,133 Último mensaje 15 Octubre 2016, 13:05 pm
por Orubatosu
Amaranta Hank se casó
Foro Libre
General Dmitry Vergadoski 1 2,471 Último mensaje 1 Febrero 2021, 14:44 pm
por Machacador
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines