SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: kike_monarcas en Martes 5 de Abril de 2005, 22:55

Título: Leer Solo Números O Solo Letras
Publicado por: kike_monarcas en Martes 5 de Abril de 2005, 22:55
Hola que tal. Tengo una duda en lenguaje C. ¿Alguien podria decirme como leer solo números desde el teclado?  :unsure:

Tengo un método pero no me funciona:

#include <conio.h>
#include <stdio.h>

void main (){
    int edad;
    printf("Edad: ");
    scanf("%[0-9]d",&edad);    // Aqui mi duda
}


Por ahi escuche de unas funciones que activan y desactivan la parte numérica y alfanumérica del teclado pero no he podido encontrar  nada. Espero que me puedan ayudar y se los agradezco por anticipado. Saludos  :hola:
Título: Re: Leer Solo Números O Solo Letras
Publicado por: fuhrer en Martes 5 de Abril de 2005, 23:21
Hola que tal.

Yo te recomiendo que utilices la función atoi, la cual te lee un texto y te lo convierte a número, si existe un error no te convierte nada, esto lo puedes hacer dentro de un ciclo hasta que te den numeros.

Espero te sirva.

Hasta luego.
Título: Re: Leer Solo Números O Solo Letras
Publicado por: © Jonathan © en Miércoles 6 de Abril de 2005, 01:35
Tambien puedes usar IF y los valores hexadecimales de los numeros los cuales son corridos.. entonces le dices si el valor introducido es mayor o menor a los valores de los numeros le pides que introdusca valores reales. Saludos
Título: Re: Leer Solo Números O Solo Letras
Publicado por: ErWillem en Miércoles 6 de Abril de 2005, 04:19
Ya sabes utilizar la librería conio.h una buena manera sería crear una función propia que permita ingresar únicamente número utilizando getch().

Puedes leer el valor de la tecla y validar que se encuentre entre '0' y '9', los que cumplan la condición los guardas en un arreglo de caracteres (cadena) y luego utilizas la función atoi :rolleyes:. Si trabajas con decimales se te complicará un poquito más el codigo pero con enteros sería muy facil.

Si eres bueno en matemáticas puedes hacerlo incluso directamente sobre una variable haciendo calculos en lugar de guardarlos en un arreglo :comp:, pero eso depende de tu capacidad y de que tanto sepas manejar el lenguaje.

Espero te sirva de algo mi ayuda :hola:.
Título: Re: Leer Solo Números O Solo Letras
Publicado por: rir3760 en Miércoles 6 de Abril de 2005, 17:05
Para validar que una cadena pueda convertirse en un numero de tipo long, unsigned long y double lo mejor es utilizar las funciones strtol, strtoul y strtod (stdlib.h).

Por ejemplo para verificar si una cadena de texto puede convertirse (o no) en un numero de tipo long:

Código: Text
  1. #include &#60;stdio.h&#62;
  2. #include &#60;string.h&#62;
  3. #include &#60;errno.h&#62;
  4. #include &#60;limits.h&#62;
  5. #include &#60;stdlib.h&#62;
  6.  
  7. #define LONG_CADENA 256
  8.  
  9. int main(int argc, char *argv[])
  10. {
  11.    char cadena[LONG_CADENA];
  12.    char *pac;
  13.    long numero;
  14.    
  15.    /* leer cadena de la entrada estandard */
  16.    printf(&#34;Introduce un numero entero: &#34;);
  17.    fflush(stdout);
  18.    fgets(cadena, LONG_CADENA, stdin);
  19.    
  20.    /* eliminar '&#092;n' si existe */
  21.    if ((pac = strchr(cadena, '&#092;n')) != NULL)
  22.       *pac = '&#092;0';
  23.    
  24.    if (cadena[0] == '&#092;0'){
  25.       puts(&#34;Error: la longitud de la cadena es 0&#34;);
  26.       return EXIT_FAILURE;
  27.    }
  28.    
  29.    numero = strtol(cadena, &pac, 10);
  30.    
  31.    if (numero == 0 && pac == cadena){
  32.       puts(&#34;Error: la cadena no puede convertirse al tipo signed long&#34;);
  33.       return EXIT_FAILURE;
  34.    }
  35.    
  36.    if (errno == ERANGE && (numero == LONG_MAX || numero == LONG_MIN)){
  37.       puts(&#34;Error: numero fuera del rango valido para el tipo signed long&#34;);
  38.       return EXIT_FAILURE;
  39.    }
  40.    
  41.    if (*pac != '&#092;0'){
  42.       printf(&#34;Error: caracteres no validos al final de la cadena: &#34;);
  43.       printf(&#34;&#092;&#34;%s&#092;&#34;&#092;n&#34;, pac);
  44.       return EXIT_FAILURE;
  45.    }
  46.    
  47.    printf(&#34;El numero %ld es valido&#092;n&#34;, numero);
  48.    
  49.    return EXIT_SUCCESS;
  50. }
  51.  

Un saludo
Título: Re: Leer Solo Números O Solo Letras
Publicado por: kike_monarcas en Miércoles 13 de Abril de 2005, 00:14
Gracias por sus comentarios. Su ayuda me ha servido de mucho.  Ya he resuelto mi duda.

Muchas gracias  :kicking:  :D