como hacer para introducir solo numeros

Iniciado por Komodo, 11 Septiembre 2010, 21:18 PM

0 Miembros y 1 Visitante están viendo este tema.

Komodo

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


16BITBoy

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.
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

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 ;)

16BITBoy

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.

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

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

#include <stdio.h>
#include <string.h>

int main()
{
char string[10];
char *ptr = string;

fgets(string, strlen(string), stdin);

if(*ptr >= 48 && *ptr <= 57) printf("Has introducido: %s", string);

else printf("No has introducido un n%cmero.", 163);

getchar();

return 0;
}


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

Saludos :P

Komodo

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..



[Zero]

Con comprobar uno a uno es suficiente:


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;
}


Saludos

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

Komodo

#8
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.

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


Horricreu

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

Saludos :P