Autor
|
Tema: caso raro! (Leído 6,135 veces)
|
0x3c
Desconectado
Mensajes: 108
learning, making mistakes, having fun
|
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  ...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 tueste es el codigo: #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
Mensajes: 1.163
Ju Já!!
|
La altura en pies también son números, prueba a declarar feet como int.
|
|
|
En línea
|
|
|
|
0x3c
Desconectado
Mensajes: 108
learning, making mistakes, having fun
|
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
Mensajes: 1.163
Ju Já!!
|
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. #include <stdio.h> #include <stdlib.h> int main() { float feet; printf("Di tu altura en pies:"); if(feet >5) printf("Eres mas alto que yo!.\n"); if(feet <5) printf("Soy mas alto que tu!\n"); if(feet ==5) printf("Somos de la misma altura!!.\n"); return(0); }
|
|
|
En línea
|
|
|
|
3mp3z@ndo
Desconectado
Mensajes: 51
|
Creo que la función isdigit() de la libreria ctype te podría venir bien
Un saludo
|
|
|
En línea
|
|
|
|
Zelios Ariex
|
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. #include <stdio.h> #include <stdlib.h> int main() { float feet; printf("Di tu altura en pies:"); if(feet >5) printf("Eres mas alto que yo!.\n"); if(feet <5) printf("Soy mas alto que tu!\n"); if(feet ==5) printf("Somos de la misma altura!!.\n"); return(0); }
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
Mensajes: 1.077
|
@Kilian, esta claro que no has probado a compilarlo xD. Si declaras feet como float, la sentencia:
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
Mensajes: 52
|
@Kilian, esta claro que no has probado a compilarlo xD. Si declaras feet como float, la sentencia:
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
Mensajes: 1.639
|
todo funciona bien el programa compila y se ejecuta a la perfeccion  ...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: #include <stdio.h> #include <stdlib.h> int main(void) { char altura[2]; int valor; printf("Di tu altura en pies:"); if (valor == 0) puts("La entrada no es valida"); else if (valor > 5) puts("Eres mas alto que yo!."); else if (valor < 5) puts("Soy mas alto que tu!"); else puts("Somos de la misma altura!!."); return 0; }
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
Mensajes: 108
learning, making mistakes, having fun
|
@rir3760soy 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  tendre que darle una leida al link que pusiste @todosgracias 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
|
|
|
|
|