Particularidades de Dev-C++

Atrás

Finalización del programa

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.

Solución alternativa

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.

Atrás