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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  como hacer para introducir solo numeros
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: como hacer para introducir solo numeros  (Leído 27,065 veces)
Komodo


Desconectado Desconectado

Mensajes: 352



Ver Perfil
como hacer para introducir solo numeros
« en: 11 Septiembre 2010, 21:18 pm »

Tengo un programa y tengo que mostrar un mensaje de error si introduzco algo que no sea un numero..¿cómo lo podría hacer?

Gracia.s


En línea


16BITBoy

Desconectado Desconectado

Mensajes: 137


En mi pompa..


Ver Perfil WWW
Re: como hacer para introducir solo numeros
« Respuesta #1 en: 11 Septiembre 2010, 21:35 pm »

hmm si lo hacemos en C...

Yo guardaría una cadena de caracteres de lo que introduzca el usuario.
Luego veo 2 problemas a resolver, saber si todos los caracteres son números, y convertir un numero escrito en una cadena de caracteres en un tipo numérico tal como int o float.

Para lo primero:
Guardo una cadena de caracteres de lo que introduzca el usuario. Luego caracter a caracter miro si este es un número o no.
Si alguno de los caracteres no es un número, termino el bucle diciéndolo y me salgo de esta función.
En caso de que todos los caracteres fuesen números comenzaría la conversión de cadena de caracteres a el tipo de formato deseado.

Y para lo segundo, no se si me equivocaré por que no lo tengo muy fresco:
Voy y compruebo la longitúd de esa cadena de caracteres, entonces sumo en una nueva variable el valor que da sabiendo el numero que leo y la cantidad de ceros en función de caracteres que me quedan.

Perdona que no ponga el código, es que estoy espesito ahora mismo xDDD pero espero que esto te haya dado una buena idea.


En línea

Blog personal: http://www.16bitboy.com/blog

- Que horrible pesadilla, unos y ceros por todas partes... hasta me parecio ver un ¡dos!
- Bender, solo fue una pesadilla, no existe eso que llamas "dos".
Dreamaker

Desconectado Desconectado

Mensajes: 277



Ver Perfil
Re: como hacer para introducir solo numeros
« Respuesta #2 en: 11 Septiembre 2010, 22:11 pm »

Podrías hacer que si el Val() del número es igual a "0" entonces que ingrese otro valor (el val() de una cadena de caracteres o cualquier otra cosa que no sea un numero es 0)

Ejemplo:

Si Val(Numero)=0 entonces
    Mostrar("Error, sólo estan permitidos números")
Fin si

Espero que se entienda, no sé C/C++ pero esa es la idea, pasalo a la sintaxis de C/C++ y ya me cuentas si te funciona

Es más rápido que andar recorriendo a ver si es un número o no ;)
En línea

16BITBoy

Desconectado Desconectado

Mensajes: 137


En mi pompa..


Ver Perfil WWW
Re: como hacer para introducir solo numeros
« Respuesta #3 en: 11 Septiembre 2010, 22:29 pm »

La cuestión es que no siempre hay esa función "Val()" imaginaria que expones. En php juraria que la hay, en python la hay, en vb no lo se pero apuesto a que si. En C  acabo de mirar ( ya que me preguntaba sobre una posible función ya hecha) y hay una función parecida pero de más bajo nivel que ahorraría programar las 2 funciones que dije antes.
strtol()
http://www.elook.org/programming/c/strtol.html

Cuando hice el algoritmo así escrito sin código en el anterior mensaje, lo hice suponiendo que no había en las librerias C estandar una función de alto nivel que hiciese esta tarea tal y como lo hacemos en otros lenguajes. Contando con que komodo preguntaba el método, asumí que no la había.

En línea

Blog personal: http://www.16bitboy.com/blog

- Que horrible pesadilla, unos y ceros por todas partes... hasta me parecio ver un ¡dos!
- Bender, solo fue una pesadilla, no existe eso que llamas "dos".
Horricreu
Wiki

Desconectado Desconectado

Mensajes: 290

¡La verdad os hará libres!


Ver Perfil WWW
Re: como hacer para introducir solo numeros
« Respuesta #4 en: 11 Septiembre 2010, 22:33 pm »

Yo tengo otro método, hasta hice el código ::):

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main()
  5. {
  6. char string[10];
  7. char *ptr = string;
  8.  
  9. fgets(string, strlen(string), stdin);
  10.  
  11. if(*ptr >= 48 && *ptr <= 57) printf("Has introducido: %s", string);
  12.  
  13. else printf("No has introducido un n%cmero.", 163);
  14.  
  15.  
  16. return 0;
  17. }

Lo que hago es introducir caracteres, sean letras, números... y mediante la tabla ASCII comprobar si he introducido un número.

Saludos :P
« Última modificación: 15 Octubre 2010, 22:50 pm por Horricreu » En línea

Komodo


Desconectado Desconectado

Mensajes: 352



Ver Perfil
Re: como hacer para introducir solo numeros
« Respuesta #5 en: 11 Septiembre 2010, 22:38 pm »

El caso Horricreu es que debe poder ingresar numeros comprendidos entre el 1 y el 99999(doy a entender que el user pone el limite)

En VB6 me suena de haberlo hecho alguna vez..pero claro..
En línea


Horricreu
Wiki

Desconectado Desconectado

Mensajes: 290

¡La verdad os hará libres!


Ver Perfil WWW
Re: como hacer para introducir solo numeros
« Respuesta #6 en: 11 Septiembre 2010, 22:43 pm »

isdigit().

Saludos :P
En línea

[Zero]
Wiki

Desconectado Desconectado

Mensajes: 1.082


CALL DWORD PTR DS:[0]


Ver Perfil WWW
Re: como hacer para introducir solo numeros
« Respuesta #7 en: 12 Septiembre 2010, 03:01 am »

Con comprobar uno a uno es suficiente:

Código
  1. bool IsNumber(char* szString)
  2. {
  3. //Recorremos todos los caracteres y comprobamos que cada uno sea un número
  4. for(unsigned int i=0;i<strlen(szString);i++)
  5. {
  6. if(!(szString[i]>='0' && szString[i]<='9')) return false;
  7. }
  8. return true;
  9. }
  10.  

Saludos
En línea


“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.”
Nietzsche
Komodo


Desconectado Desconectado

Mensajes: 352



Ver Perfil
Re: como hacer para introducir solo numeros
« Respuesta #8 en: 12 Septiembre 2010, 13:35 pm »

Bueno lo de isdigit() y la función que me has puesto Zero es exactamente lo mismo, lo único que hay que hacer es en vez de introducir números introducir esos números en una cadena..lo pruebo os pongo el ejemplo y os digo si he tenido errores.

Muchas gracias a 16bitboy, horricreu y Zero.

Lh: No hagas doble post, utiliza el botón modificar. La próxima borro directamente.

Código:
bool IsNumber(char* szString)
{
//Recorremos todos los caracteres y comprobamos que cada uno sea un número
for(unsigned int i=0;i<strlen(szString);i++)
{
if(!(szString[i]>='0' && szString[i]<='9')) return false;
}
return true;
}

int main(){
char fecha[4];
printf("Introduce la fecha de nacimiento(4 digitos): ");
scanf("%s",fecha);
if(IsNumber(fecha)==1){
printf("\nNaciste: %i",atoi(fecha));
}
else{
printf("\nError, no has introducido numeros");
}
return 0;
}

Lo he usado en mi code y lo he implementado de un modo parecido a este ;)

Gracias de nuevo
« Última modificación: 12 Septiembre 2010, 21:53 pm por Littlehorse » En línea


Horricreu
Wiki

Desconectado Desconectado

Mensajes: 290

¡La verdad os hará libres!


Ver Perfil WWW
Re: como hacer para introducir solo numeros
« Respuesta #9 en: 12 Septiembre 2010, 16:57 pm »

Haces exactamente lo mismo con la función que te dí y además te ahorras bastante código.

Saludos :P
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines