Con Dev-C++ cuando finaliza un programa desaparece la ventana que se crea para su ejecución y esto sucede tan rápido que no vemos el resultado. Podremos comprobarlo tanto si ejecutamos el programa desde el entorno de Dev-C++ como si lo ejecutamos desde el explorador de archivos.
Un posible método de trabajo que solucione esta problemática es el de abrir un intérprete de comandos para la ejecución (Inicio | Ejecutar... | cmd), posicionarnos en la carpeta del ejecutable y ejecutarlo. Al finalizar el programa seguiremos en el intérprete de comandos que estábamos y nos volvera a mostrar el prompt.
Otra posible solución (y sólo para las pruebas de los programas) es añadir
al final del programa la lectura de un carácter mediante la función
getchar()
(cuyo prototipo está en <stdio.h>
).
Suele suceder a menudo que tras utilizar la función
scanf()
queda pendiente de leer el fin de línea
('\n'
)
que valida la entrada de datos.
Para evitar que la función getchar()
lea ese fin de línea lo
típico es llamar a la función fflush(stdin)
que vacía la
entrada de datos del programa y nos asegura que el programa para.
Teniendo en cuenta las propuestas anteriores la estructura básica propuesta de todo programa será:
#include <stdio.h> int main (void) { ... fflush(stdin); getchar(); return 0; }
Es de notar que estos añadidos no se ponen en el papel ya que sirven tan solo para el entorno de pruebas.
Una posible solución alternativa a la utilización combinada del
fflush(stdin)
y el getchar()
es la llamada al comando del sistema pause
mediante la función
system
(cuyo prototipo está en <stdlib.h>
).
El programa básico siguiendo este esquema sería:
#include <stdio.h> #include <stdlib.h> int main(void) { ... system("pause"); return 0; }
En el ejemplo propuesto el fichero de cabeceras <stdio.h>
no es necesario
pero es habitual utilizar scanf
o printf
.
Si abrimos un proyecto nuevo con Dev-C++ nos propone una plantilla que es prácticamente ésta.
La diferencia está en que main
admite argumentos pero no nos vamos a preocupar de este
durante este curso:
int main(int argc, char *argv[])
Nótese que la orden "PAUSE" de la plantilla está en mayúsculas, pero eso no es un problema ya que, al contrario que en el lenguaje C, el intérprete de comandos de MS-DOS no es sensible al tipo de letra.