Desarrollo de una rutina

de validación en lenguaje C


Por Oscar Ross

Antecedentes

Durante los últimos 30 años, la historia de la computación electrónica ha sufrido adelantos vertiginosos. Los últimos datos por ejemplo, muestran que internet ha conseguido reunir, desde su nacimiento como un medio de comunicación comercial, un auditorio de 10 millones de personas en tan solamente 5 años; como comparación, podemos citar que la televisión reunió el mismo auditorio en el doble de tiempo desde que nació a la vida pública.

Sin embargo, el corazón de la computación sigue siendo el mismo desde hace unos 30 años, cuando Kernighan y Ritchie diseñan e implementan la primera versión del lenguaje de programación C. Desde su nacimiento, y hasta hace apenas unos años, el lenguaje C ha sido EL lenguaje de programación de computadoras por excelencia. ¿Qué es lo que ha hecho de C la fuerza dominante en el desarrollo de sistemas? Se pueden mencionar multitud de factores contribuyentes al auge del lenguaje, pero podríamos citar como uno de los principales el hecho de que logra envolver y simplificar en un conjunto de instrucciones muy reducido y una librería extensa, la casi totalidad del poder del hardware sin la complejidad de los lenguajes ensambladores. C es un nivel de abstracción superior al lenguaje ensamblador, se halla más cerca de la realidad humana. Adicionalmente, podemos mencionar el hecho de que C es un lenguaje estructurado, modular y funcional, características de las que el lenguaje ensamblador carece; esto representa una ventaja de proporciones inmensas puesto que hace la escritura/lectura del código de programa mucho más sencilla.

El lenguaje no carece de defectos. Uno de los principales es el muy debil chequeo de tipos. ¿Qué pretendo decir con 'chequeo de tipos'? La frase se refiere a que tan estricto es el compilador de C para asegurarse de que, si yo - el programador - declaro una variable entera, pueda asignar valores a esta SI Y SOLO SI estos son enteros. C es un lenguaje muy laxo en sus asignaciones. Pongamos un ejemplo. Si yo declaro una variable entera en Pascal y después pretendo asignarle un caractér, esto es lo que el compilador presenta:


Program Chequeo_De_Tipos;

var SoloEnteros : integer;

begin

SoloEnteros := 'a';

end.

 

(Compile)

ERROR 26 - Type Mismatch.


¿Qué hace el compilador de C en un caso similar?, veamos:


#include <stdio.h>

main()

{

int SoloEnteros;

SoloEnteros = 'A';

}

(Compile)

No errors - file TypeChk.C


¿Es esto posible? ¿Quiere decir que C es un lenguaje en realidad sin tipos? No, el compilador simplemente asigna a SoloEnteros el valor ASCII de la A mayúscula, si revisamos la tabla ASCII, nos damos cuenta que los caractéres, tienen valores enteros de 0 a 255.

Para muchos, esta 'característica' del lenguaje es un error fatal, sin embargo tiene sus ventajas si se enfoca adecuadamente.

Un segundo problema al momento de capturar datos desde teclado es que C no incluye lo que se conoce como 'manejadores de error'. Por ejemplo supongamos que yo le estoy pidiendo al usuario, desde un programa, que me proporcione su edad. Las restricciones lógicas son:

En un lenguaje como por ejemplo Visual Basic, existen multitud de técnicas incorporadas para el tratamiento de estas rutinas de entrada. Por ejemplo, el programador puede fácilmente eliminar cualquier señal proveniente de teclas específicas que no se desee capturar. Una segunda técnica consistiría en capturar los datos tecleados como cadenas, y realizar comprobaciones y conversiones de tipo mediante las funciones ya incorporadas por el lenguaje. Una tercera técnica consiste en usar tratamiento de errores, si el usuario intenta proporcionar un dato alfanumumérico cuando se le pidió uno numérico, la asignación a la variable producirá un error en tiempo de ejecución, el programador puede (y debe) anticiparse a esto 'atrapando' cualquier error generado, verificando el tipo de error de que se trate y tomando un curso de acción adecuado para el tipo de error.

Entonces, ¿cómo hace un programador C para certificar que si pide un entero el usuario introduzca un entero? Bueno, dado el poder y la flexibilidad del lenguaje, un programador de C escribe las rutinas el mismo.

En las siguientes líneas (corrección: páginas) intentaré exponer el desarrollo de una idea sobre como escribir un conjunto de funciones integradas para la validación y captura de datos desde el teclado utilizando el lenguaje 'C'. Me gustaría también hacer algunas aclaraciones antes de comenzar:

 


Requisitos

Para poder seguir el curso del desarrollo es necesario contar con ciertas herramientas y conocimientos. A continuación viene una lista de recomendaciones:

  1. Conocimientos básicos sobre el lenguaje C - Es obviamente necesario tener ciertos conocimientos de C; sin embargo, no asumo ninguna clase de conocimientos 'avanzados' sobre el lenguaje. El diseño de las rutinas se basará en la utilización óptima de las herramientas básicas del lenguaje: variables, arreglos, apuntadores y las funciones de la biblioteca estándar. Si te interesa aprender más sobre el lenguaje, en internet existen varios excelentes tutoriales, revisa la lista.

  2. Un compilador de C - Podría tratar de seguirse este documento sin el compilador pero el objetivo didáctico se perdería. Para poder aprender a programar en cualquier lenguaje a cualquier nivel, es necesario escribir, compilar, ejecutar y corregir programas. Puedes descargar compiladores de C gratuitos del internet. Revisa la lista aquí.


[Home] [Ligas] [Descripción del proyecto]