Leer de teclado con scanf


Hay constumbres tremendamente nocivas y muy difíciles de revertir. En cualquier apunte de clase de C los profesores dan ejemplos simples en los que usan scanf para leer enteros de teclado. Eso no sólo es absolutamente innecesario (podrían ser parámetros de la función en lugar de leerlos) sino que es nocivo.

1) Scanf está pensada para leer entrada con un determinado formato y el formato de lo que se ingresa con el teclado depende del ser humano que está tipeando.

2) Scanf termina de leer cuando termina el formato y no cuando lee todo el buffer de teclado. Esos caractres que quedaron en el buffer serán leídos en una futura invocación de cualquier función que lea de teclado, casi seguramente en forma inesperada.

3) Scanf lee cualquier cosa cuando espera un número decimal y se ingresa una letra o un caracter que no esté entre 0 y 9. Y no sabemos si realmente el usuario ingresó ese -244234245235 o si es que ingresó “hola” y scanf lo interpretó así.

4) A veces los programamdores se ven tentados de “arreglar” los problemas que tiene scanf para leer de teclado, generando, por supuesto, más problemas en otras partes de la aplicación.

Para leer de teclado, lo correcto y lo ideal, es leer caracter por caracter, aunque cueste un poquitín más al principio. A la larga, las ventajas son enormes en que no habrá sorpresas en lo que obtenemos al leer.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s