[C con Clase] AYUDA EN borland C++ con windows 7 - crear menu

Salvador Pozo salvador en conclase.net
Lun Jun 6 21:43:26 CEST 2011


El pasado 2011-06-06 16:28:31, Ronald Lopez escribió:
 
RL> saludos, utilizo windos 7 con Borland c++, adjunto codigo d lo q he estado probando.
RL> Ncsito hacer un menu d opciones utilizando switch, mientras no se teclee opcion d salida q mantnga el ciclo. En caso d ingresar letras q dvuelva el focus a la variable.

Hola:

Por lo que veo, se trata de un programa para consola. Esto limita bastante las cosas que puedes hacer en cuanto a edición y validación de datos.

Por ejemplo, no puedes editar una cadena para modificarla o corregirla. En el proceso de validación puedes aceptar el dato o desecharlo, ahí acaban tus opciones.

La idea es sencilla:
- Lees una cadena
- Verificas que se trata de un dato válido. En este caso, un número.
- Si el dato es válido, lo aceptas. Si no es válido, regresas con un código de error que indica que se debe volver a leer el dato.

Lo ideal es encapsular todo esto en una función (en C++ lo haríamos en una clase, pero dejaremos eso para más adelante).

La función tendría como valor de retorno el dato leído, y no regresaría hasta haber obtenido un valor válido.

int LeeNumero();

Podrías mejorar esa función para que los valores estuvieran en un rango concreto, por ejemplo, añadiendo dos parámetros que indiquen el valor mínimo y máximo. Esto te lo dejo a ti.

Hay algunas limitaciones que debes tener en cuenta en lo que respecta a las funciones estándar.

scanf("%s", num) lee sólo una palabra, de modo que si el usuario teclea más, las que sobran quedan en el buffer de entrada, y se leen en la siguiente llamada a la función.

atoi interpreta como un número los primeros caracteres de la cadena de entrada, si por ejemplo, el usuario teclea "1234ad", la función retorna el valor 1234.

En general, estas funciones están diseñadas para usarse con usuarios bien intencionados, que no van a intentar romper el programa, por lo que las validaciones se limitan a detectar posibles errores, y no para prevenir intentos de ataques o de romper el programa. Si lo que pretendes es evitar cualquier error, intencionado o no, deberás mejorar el proceso de validación.

Primero, intentando leer todos los caracteres posibles, y desechando el resto antes de la siguiente lectura. C++ dispone de mejores herramientas para eso que C.

Mira la sección de streams para aprender sobre esto:
http://c.conclase.net/curso/index.php?cap=904#inicio

Segundo, verificando carácter a carácter que todos los que componen la cadena leída sean numéricos.

Tercero, convirtiendo la cadena a número y retornando, si en válida; o repitiendo la lectura si no lo es.


-- 
Salvador Pozo (Administrador)
mailto:salvador en conclase.net


Más información sobre la lista de distribución Cconclase