[El código de los dos programas usados en este pequeño tutorial se encuentran al final del post [codi]]
Para muchos se que no estoy contando nada nuevo, pero el motivo de este post es sobretodo para gente que empieza a programar, especialmente para aquellos que creen necesitar agún tipo de pausa al ejecturar programas para ver resultados (system(pause), getchar, getch etc).
Para este problema se nos plantean, entre otras, dos soluciones:
- Compilar/ejecutar el programa con Code::Blocks [cdbl]
- Ejecutar el programa una vez compilado vía la consola de windows [cmdw]
Vía Code::Blocks [cdbl]
Code::Blocks es un IDE (entorno de desarrollo) con compilador (podemos elegir qué compilador usar), open source, cross plataform y gratuito. Una de sus muchas ventajas, es que cuando compilamos y ejecutamos un programa en este IDE, el propio entorno retiene la ventana mostrando el return y el tiempo empleado en la ejecución del programa (tiempo total, no sólo de ejecución de instrucciones, cuenta también el tiempo que tardamos en introducir datos vía scanf, cin y demás instrucciones que nos soliciten que pulsemos algo).
Dado que esto no es un manual de como usar Code::Blocks, me centraré en la compilación y ejecución con este entorno. Supongamos que tenemos ya un programa creado en Code::Blocks:
(http://img826.imageshack.us/img826/7480/code1.th.jpg) (http://img826.imageshack.us/i/code1.jpg/)
El recuadro rojo señala donde debemos hacer click para compilar y/o ejecutar nuestro programa. En la siguiente imagen muestro como hacer lo mismo vía el menú "Build".
(http://img192.imageshack.us/img192/2830/code2.th.jpg) (http://img192.imageshack.us/i/code2.jpg/)
El resultado de ambas es la siguiente, donde vemos que el programa se ha ejecutado, nos ha dado unos resultados y Code::Blocks lo ha detenido.
(http://img32.imageshack.us/img32/802/code3e.th.jpg) (http://img32.imageshack.us/i/code3e.jpg/)
Vía consola de windows [cmdw]
Otra solución reside en ejecutar los programas vía el cmd de Windows. A diferencia de si hiciésemos doble click en el programa ya compilado (que abriría una ventana y la cerraría inmediatamente después de su uso) ejecutarlo de esta forma permite visualizar los textos, resultados etc que el programa imprima por pantalla sin que desaparezca en un instante. Procedo a explicar como:
Asumamos que ya tenemos nuestro programa compilado y deseamos probarlo. Para ello, vamos al menú inicio y buscamos cmd:
(http://img405.imageshack.us/img405/3556/cmd1.th.jpg) (http://img405.imageshack.us/i/cmd1.jpg/)
Le damos a Enter y nos aparecerá una ventana similar a esta:
(http://img839.imageshack.us/img839/2897/cmd2d.th.jpg) (http://img839.imageshack.us/i/cmd2d.jpg/)
En principio la ruta en la que nos encontramos es la de nuestro usuario, pudiendonos mover de directorio con el comando cd y obtener el contenido de un directorio con el comando dir:
(http://img101.imageshack.us/img101/1511/cmd3.th.jpg) (http://img101.imageshack.us/i/cmd3.jpg/)
Una vez nos encontramos en el directorio de nuestro programa, procedemos a ejecutarlo de la siguiente forma:
nombre del programa.extensión argumento 1 argumento 2....
En este caso, el programa recibe un archivo txt como argumento:
(http://img825.imageshack.us/img825/6031/cmd4.th.jpg) (http://img825.imageshack.us/i/cmd4.jpg/)
y el resultado de la ejecución es:
(http://img705.imageshack.us/img705/9159/cmd5.th.jpg) (http://img705.imageshack.us/i/cmd5.jpg/)
Conclusión
Como habréis podido observar, es bastante sencillo ejecutar programas sin necesidad de instrucciones para detenerlos al finalizar, ahorrando instrucciones como system (pause), getchar, getch ( y por ende, NO necesitamos conio.h (como librería obsoleta)).
¿Comentarios, dudas, sugerencias, feedback en general?
[codi]
class_pila.cpp
#include <iostream>
#include <fstream>
using namespace std;
class pila{
struct node{
int num;
struct node *seg;
};
node * cap;
public:
pila();
~pila();
void push(int num);
int pop();
int top() const;
bool buidap() const;
pila & operator << (const int num);
};
pila::pila(){
cap=0;
}
pila::~pila(){
while(cap){
node *aux=cap;
cap=cap->seg;
delete aux;
}
}
bool pila::buidap() const{
return (!cap);
}
int pila::top() const{
if(!buidap())
return cap->num;
else return -666;
}
int pila::pop(){
if(cap){
node *aux=cap;
cap=cap->seg;
int numaux=aux->num;
delete aux;
return numaux;
}
else return -666;
}
void pila::push(int n){
node *nou;
nou=new node;
nou->num=n;
nou->seg=cap;
cap=nou;
}
pila & pila::operator << (const int num){
push(num);
return *this;}
int main(){
pila p1;
int num;
ifstream fitx;
fitx.open("class_pila.txt");
if(!fitx){
cerr << "error al abrir el fichero" << endl;
return -1;}
while(fitx >> num){
cout << num << endl;
//p1.push(num);
p1 << num;
}
if(!p1.buidap())
cout << "pila con elementos" << endl;
while(!p1.buidap()){
cout << p1.pop() << endl;
}
if(p1.buidap())
cout << "WARNING: pila vacia" << endl;
fitx.close();
return 0;
}
class_pila2.cpp
#include <iostream>
#include <fstream>
using namespace std;
class pila{
struct node{
int num;
struct node *seg;
};
node * cap;
public:
pila();
~pila();
void push(int num);
int pop();
int top() const;
bool buidap() const;
pila & operator << (const int num);
};
pila::pila(){
cap=0;
}
pila::~pila(){
while(cap){
node *aux=cap;
cap=cap->seg;
delete aux;
}
}
bool pila::buidap() const{
return (!cap);
}
int pila::top() const{
if(!buidap())
return cap->num;
else return -666;
}
int pila::pop(){
if(cap){
node *aux=cap;
cap=cap->seg;
int numaux=aux->num;
delete aux;
return numaux;
}
else return -666;
}
void pila::push(int n){
node *nou;
nou=new node;
nou->num=n;
nou->seg=cap;
cap=nou;
}
pila & pila::operator << (const int num){
push(num);
return *this;}
int main(int argc, char **argv){
pila p1;
int num;
ifstream fitx;
fitx.open(argv[1]);
if(!fitx){
cerr << "error opertura fitxer" << endl;
return -1;}
while(fitx >> num){
cout << num << endl;
//p1.push(num);
p1 << num;
}
if(!p1.buidap())
cerr << "pila amb elements" << endl;
while(!p1.buidap()){
cout << p1.pop() << endl;
}
if(p1.buidap())
cerr << "WARNING: pila buida" << endl;
fitx.close();
return 0;
}
contenido de class_pila.txt:
1
5
6
7
10
20
50
Fff por fin un post para que la gente deje de usar conio.h o stdlib.h para system ()... cuando se programa en C no se programa en Batch xD...
Gracias
si es verdad los que salimos del bat se nos hace dificil si no tenemos pause....para ver q esta haciendo el code