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

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda con Código "Simple en C" Hacer que solo se ingresen numeros
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 2 [3] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con Código "Simple en C" Hacer que solo se ingresen numeros  (Leído 11,684 veces)
Leyer


Desconectado Desconectado

Mensajes: 786


leyer@elhacker.net


Ver Perfil WWW
Re: Ayuda con Código "Simple en C" Hacer que solo se ingresen numeros
« Respuesta #20 en: 30 Diciembre 2011, 20:56 pm »



No leiste lo que dije


En línea

ZedGe

Desconectado Desconectado

Mensajes: 154


Ver Perfil
Re: Ayuda con Código "Simple en C" Hacer que solo se ingresen numeros
« Respuesta #21 en: 30 Diciembre 2011, 20:58 pm »



No leiste lo que dije


Lo de usar un char y pasarlo a int?? lo probe pero tampoco salio bien


En línea

KuraraGNU

Desconectado Desconectado

Mensajes: 209



Ver Perfil
Re: Ayuda con Código "Simple en C" Hacer que solo se ingresen numeros
« Respuesta #22 en: 30 Diciembre 2011, 21:01 pm »

Leyer tiene razón, no puedes hacer

scanf("%d",&opcion)

Porque en el caso de meter una letra saltaría un error del programa y no lo estás controlando, por eso tienes que pasarlo a numero una vez recogido, pero no en la misma recolección, cambia tu código por lo que puso él, o cambia el tipo de dato que recoje "opcion" (Yo creo que es lo mejor, pero no se por qué tipo deberías cambiarlo, no se qué es lo que devuelve una tecla si un número, un char o un que, cuando yo he programado devuelve un código numérico que luego hay que parsear a lo que quieras usar). Yo lo siento no se mucho de c.


Código
  1. char option[2];
  2. printf("Opcion: ");
  3. scanf("%s",option);
  4. int opt=atoi(option);
  5. if(opt>3&&opt>10||opt==0)printf("fuera");


PD: 2 paginas en esta boludes

Lo siento, es que como sólo pegó parte del código yo dije lo que veía mal en esa parte del código u.u espero no haber parecido muy tonta.
En línea

ZedGe

Desconectado Desconectado

Mensajes: 154


Ver Perfil
Re: Ayuda con Código "Simple en C" Hacer que solo se ingresen numeros
« Respuesta #23 en: 30 Diciembre 2011, 21:30 pm »

La Salucion es:

Código:
char opcion[2];//Variable que Guarda la opcion del menu
 

Las opciones siguen siendo 1,2,3,10, pero al ingresar una letra o uno distinto hace lo que quiera que es volver al menu... Gracias a todos =D
En línea

KuraraGNU

Desconectado Desconectado

Mensajes: 209



Ver Perfil
Re: Ayuda con Código "Simple en C" Hacer que solo se ingresen numeros
« Respuesta #24 en: 30 Diciembre 2011, 21:34 pm »

Es una de las posibles soluciones sí, es la que más me gustaba a mi, pero lo que dijo Leyer también debería de funcionar. ¿Ves? El problema estaba en la recogida de datos Azn
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Ayuda con Código "Simple en C" Hacer que solo se ingresen numeros
« Respuesta #25 en: 30 Diciembre 2011, 23:11 pm »

Si nos enfocamos solo en el menú las operaciones a realizar son:

1) Leer un entero de la entrada estándar, para ello basta con scanf.

2) Descartar el resto de la linea, necesario ya que si scanf no puede realizar una conversión los caracteres se mantienen en el bufer de la entrada estándar.

3) Discriminar el numero mediante una sentencia de selección.

Un programa de ejemplo, lo mas sencillo posible es:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(void)
  5. {
  6.   int opcion;
  7.   int ch;
  8.   int ok;
  9.  
  10.   do {
  11.      puts(" 1) Opcion A");
  12.      puts(" 2) Opcion B");
  13.      puts(" 3) Opcion C");
  14.      puts("10) Salir");
  15.  
  16.      /* 1) Tratamos de leer un numero */
  17.      ok = 1;
  18.      if (scanf("%d", &opcion) != 1){
  19.         puts("Entrada no valida!");
  20.         ok = 0;
  21.      }
  22.  
  23.      /* 2) Descartamos el resto de la linea */
  24.      while ((ch = getchar()) != EOF && ch != '\n')
  25.         ;
  26.  
  27.      /* 3) Si es un numero se selecciona la operacion */
  28.      if (ok)
  29.         switch (opcion){
  30.         case 1:
  31.            puts("La opcion seleccionada es la A");
  32.            break;
  33.         case 2:
  34.            puts("La opcion seleccionada es la B");
  35.            break;
  36.         case 3:
  37.            puts("La opcion seleccionada es la C");
  38.            break;
  39.         case 10:
  40.            puts("La opcion seleccionada es terminar");
  41.            break;
  42.         default:
  43.            puts("Numero fuera del rango valido!");
  44.            break;
  45.         }
  46.   }while (opcion != 10);
  47.  
  48.   return EXIT_SUCCESS;
  49. }

Por cierto utilizar scanf y similares tiene sus limitaciones, Si se necesita una validación a prueba de fallos se debe recurrir a las funciones strtol, strtoul o strtod.

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
Páginas: 1 2 [3] Ir Arriba Respuesta Imprimir 

Ir a:  

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