[C con Clase] (sin asunto)

Salvador Pozo salvapozo en gmail.com
Vie Mayo 16 09:55:25 CEST 2008


Hola:

Lo primero, que conste que a mi también me parece poco elegante usar
cin.get() o system("pause") para detener la ejecución de un programa.
Incluso me lo parece el usar el cin.ignore().

Pero la falta de elegancia no está en el lenguaje. Recordemos que
estas funciones, y el tratamiento que hace C++ de los dispositivos de
entrada y salida es de un nivel relativamente bajo. Es decir, el
tratamiento está próximo al hardware, y por lo tanto, es frecuente que
nos veamos atendiendo a tareas básicas, como vaciar buffers.

Pero la principal falta de elegancia es responsabilidad de Windows,
por una parte, y del propio Dev-C++ por otra.

Windows, por una parte, se empeña en cerrar la ventana que se abre
automáticamente al ejecutar cualquier programa para consola. Dev-C++,
por su parte, ignora esto y no hace nada por impedirlo.

Otros entornos de programación, como Code::Blocks, mantienen la
ventana abierta hasta que el usuario la cierra. Creo que esto sí es
más elegante. :-)

Otra alternativa es que nosotros abramos directamente una consola de
comandos, y ejecutemos nuestros programas directamente desde ella,
tecleando su nombre. De este modo, cuando el programa termine,
devolverá el control a la consola, y podremos seguir trabajando o
revisar las salidas de nuestro programa.

> Solamente me queda la duda de por qué hay veces que se necesita una
> instrucción 'cin.get()' y otras veces se necesitan 2.

Todo depende de si el programa hace alguna lectura del teclado o no.
Si usamos el operador >> para leer un dato, siempre quedará en el
buffer al menos un retorno de línea, y si sólo colocamos un cin.get(),
esta sentencia lo leerá y continuará la ejecución.

Pero incluso poniendo dos de estas instrucciones es imposible
garantizar que el programa se parará. Si el usuario teclea el dato, y
a continuación un espacio y otros datos, incluso con varias sentencias
cin.get() la consola se cerrará sin dejarnos ver la salida.

Hasta pronto.
-- 
Salvador Pozo Coronado
http://www.conclase.net
mailto:salvapozo en gmail.com




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