Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Komodo en 11 Septiembre 2010, 21:18 pm



Título: como hacer para introducir solo numeros
Publicado por: Komodo 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


Título: Re: como hacer para introducir solo numeros
Publicado por: 16BITBoy 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.


Título: Re: como hacer para introducir solo numeros
Publicado por: Dreamaker 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 ;)


Título: Re: como hacer para introducir solo numeros
Publicado por: 16BITBoy 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.



Título: Re: como hacer para introducir solo numeros
Publicado por: Horricreu 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


Título: Re: como hacer para introducir solo numeros
Publicado por: Komodo 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..


Título: Re: como hacer para introducir solo numeros
Publicado por: Horricreu en 11 Septiembre 2010, 22:43 pm
isdigit() (http://www.cplusplus.com/reference/clibrary/cctype/isdigit/).

Saludos :P


Título: Re: como hacer para introducir solo numeros
Publicado por: [Zero] 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


Título: Re: como hacer para introducir solo numeros
Publicado por: Komodo 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


Título: Re: como hacer para introducir solo numeros
Publicado por: Horricreu 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


Título: Re: como hacer para introducir solo numeros
Publicado por: Komodo en 12 Septiembre 2010, 17:01 pm
Realmente si, pero me da palo usar ctype.h jajjaja

De todos modos lo tendré en cuenta Horricreu :)


Título: Re: como hacer para introducir solo numeros
Publicado por: Horricreu en 12 Septiembre 2010, 18:47 pm
Realmente si, pero me da palo usar ctype.h jajjaja

De todos modos lo tendré en cuenta Horricreu :)

Ya...

Saludos :P


Título: Re: como hacer para introducir solo numeros
Publicado por: leogtz en 12 Septiembre 2010, 19:05 pm
Yo usaría:

Código
  1. #include <stdio.h>
  2. int main()
  3. {
  4.    signed int n;
  5.    char buffer[100];
  6.    do
  7.    {
  8.        printf("n : ");
  9.        fgets(buffer, 99, stdin);
  10.    } while(sscanf(buffer, "%d", &n) != 1);
  11.    printf("Numero : %d\n", n);
  12.    return 0;
  13. }
  14.  


Código
  1. #include <stdio.h>
  2. void error(void)
  3. {
  4.    puts("Error en la captura de datos.");
  5. }
  6. int main(void)
  7. {
  8.    signed int correcto = 1, n;
  9.    char buffer[100];
  10.  
  11.    do
  12.    {
  13.        correcto = 1;
  14.        printf("n : ");
  15.        fgets(buffer, 100, stdin);
  16.        if(sscanf(buffer, "%d", &n) != 1)
  17.        {
  18.            error();
  19.            correcto = 0;
  20.        }
  21.    } while(correcto != 1);
  22.    printf("Recogido : %d\n", n);
  23.    return 0;
  24. }
  25.  


Título: Re: como hacer para introducir solo numeros
Publicado por: Komodo en 13 Septiembre 2010, 20:17 pm
Gracias Leo.

Aunque la función esa me ha molado más xD


Título: Re: como hacer para introducir solo numeros
Publicado por: leogtz en 14 Septiembre 2010, 01:22 am
¿qué función?


Título: Re: como hacer para introducir solo numeros
Publicado por: Shell Root en 14 Septiembre 2010, 01:31 am
IsNumber, supongo.