Saltar al contenido
Topos Uranos

Resumen

Un programa transforma entradas en salidas, y esta clase estudia los dos extremos de esa transformación y lo que puede fallar entre ellos. Enseña a escribir con std::print y std::println, con marcadores y campos de formato que fijan el ancho, la alineación y los decimales; a leer números con std::cin; a prever qué ocurre cuando el usuario escribe algo distinto de lo pedido, cosa que, con un sistema de entrada como el de C++, no produce un aviso, sino un flujo en estado de error y una variable con un cero; y a clasificar los errores de un programa en cuatro clases, según el momento en que se manifiestan: de compilación, de enlace, de ejecución y de lógica. Termina con la lectura metódica de los mensajes del compilador.

Objetivos de aprendizaje

  1. Escribir programas que lean datos con std::cin y escriban resultados con std::println, usando campos de formato para el ancho y los decimales.
  2. Predecir la salida exacta de un programa con varias llamadas a std::print y std::println, saltos de línea incluidos.
  3. Describir qué ocurre cuando la entrada no tiene la forma esperada (letras en lugar de un número) y comprobar el estado de la lectura.
  4. Clasificar un error como de compilación, de enlace, de ejecución o de lógica, y localizarlo a partir de su manifestación.

El programa y su frontera

En la clase Del problema al algoritmo se especificó cada problema por lo que entra y lo que sale. Un programa realiza esa especificación: recibe datos, los transforma y entrega resultados. Ahora bien, los datos no nacen dentro del programa, sino fuera de él, en el teclado de quien lo usa, en un archivo o en otro programa; y los resultados tampoco se quedan dentro, sino que van a una pantalla, a un archivo o a otro programa. La comunicación con ese exterior se hace por dos canales que el sistema operativo abre para todo programa al ponerlo en marcha: la entrada estándar, que en una terminal es lo que se escribe con el teclado, y la salida estándar, que es lo que la terminal muestra. C++ los representa como flujos: secuencias de caracteres que se consumen o se producen en orden, uno tras otro.

Los dos extremos no son simétricos. La salida la decide el programa, y por eso puede escribirse con exactitud: cada carácter que aparece en la pantalla es el que el programa mandó escribir. La entrada, en cambio, la decide otro: el programa pide un número, pero quien está frente al teclado puede escribir una palabra, un número con coma decimal, un número demasiado grande o nada. Si esto es así, la entrada es una frontera no confiable, y todo programa que lee datos debe prever qué hará cuando lo recibido no tenga la forma esperada. Esta clase enseña primero a escribir, después a leer, después qué ocurre cuando la lectura fracasa, y por último a reconocer los errores, los del programa y no los del usuario, según el momento en que se manifiestan.