[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