elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ejecutar programas en Windows sin necesidad de pausas (system (pause) etc)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ejecutar programas en Windows sin necesidad de pausas (system (pause) etc)  (Leído 4,768 veces)
Akai


Desconectado Desconectado

Mensajes: 823



Ver Perfil
Ejecutar programas en Windows sin necesidad de pausas (system (pause) etc)
« en: 5 Octubre 2010, 12:20 pm »

[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:



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".



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.






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:




Le damos a Enter y nos aparecerá una ventana similar a esta:




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:




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:





y el resultado de la ejecución es:




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
Código
  1. #include <iostream>
  2. #include <fstream>
  3. using namespace std;
  4.  
  5. class pila{
  6.  
  7. struct node{
  8.    int num;
  9.    struct node *seg;
  10.    };
  11.  
  12. node * cap;
  13.  
  14. public:
  15.    pila();
  16.    ~pila();
  17.    void push(int num);
  18.    int pop();
  19.    int top() const;
  20.    bool buidap() const;
  21.    pila & operator << (const int num);
  22. };
  23.  
  24.  
  25. pila::pila(){
  26.    cap=0;
  27. }
  28.  
  29. pila::~pila(){
  30.    while(cap){
  31.    node *aux=cap;
  32.    cap=cap->seg;
  33.    delete aux;
  34.    }
  35. }
  36.  
  37. bool pila::buidap() const{
  38. return (!cap);
  39. }
  40.  
  41. int pila::top() const{
  42.    if(!buidap())
  43.        return cap->num;
  44.    else return -666;
  45. }
  46.  
  47. int pila::pop(){
  48.    if(cap){
  49.        node *aux=cap;
  50.        cap=cap->seg;
  51.        int numaux=aux->num;
  52.        delete aux;
  53.        return numaux;
  54.    }
  55.    else return -666;
  56. }
  57.  
  58. void pila::push(int n){
  59.    node *nou;
  60.    nou=new node;
  61.    nou->num=n;
  62.    nou->seg=cap;
  63.    cap=nou;
  64.  
  65. }
  66.  
  67. pila & pila::operator << (const int num){
  68. push(num);
  69. return *this;}
  70.  
  71. int main(){
  72.    pila p1;
  73.    int num;
  74.    ifstream fitx;
  75.    fitx.open("class_pila.txt");
  76.  
  77.    if(!fitx){
  78.        cerr << "error al abrir el fichero" << endl;
  79.        return -1;}
  80.  
  81.    while(fitx >> num){
  82.    cout << num << endl;
  83.    //p1.push(num);
  84.    p1 << num;
  85.    }
  86.  
  87.    if(!p1.buidap())
  88.        cout << "pila con elementos" << endl;
  89.  
  90.    while(!p1.buidap()){
  91.    cout << p1.pop() << endl;
  92.    }
  93.  
  94.    if(p1.buidap())
  95.        cout << "WARNING: pila vacia" << endl;
  96.  
  97.    fitx.close();
  98.    return 0;
  99. }
  100.  

class_pila2.cpp
Código
  1. #include <iostream>
  2. #include <fstream>
  3. using namespace std;
  4.  
  5. class pila{
  6.  
  7. struct node{
  8.    int num;
  9.    struct node *seg;
  10.    };
  11.  
  12. node * cap;
  13.  
  14. public:
  15.    pila();
  16.    ~pila();
  17.    void push(int num);
  18.    int pop();
  19.    int top() const;
  20.    bool buidap() const;
  21.    pila & operator << (const int num);
  22. };
  23.  
  24.  
  25. pila::pila(){
  26.    cap=0;
  27. }
  28.  
  29. pila::~pila(){
  30.    while(cap){
  31.    node *aux=cap;
  32.    cap=cap->seg;
  33.    delete aux;
  34.    }
  35. }
  36.  
  37. bool pila::buidap() const{
  38. return (!cap);
  39. }
  40.  
  41. int pila::top() const{
  42.    if(!buidap())
  43.        return cap->num;
  44.    else return -666;
  45. }
  46.  
  47. int pila::pop(){
  48.    if(cap){
  49.        node *aux=cap;
  50.        cap=cap->seg;
  51.        int numaux=aux->num;
  52.        delete aux;
  53.        return numaux;
  54.    }
  55.    else return -666;
  56. }
  57.  
  58. void pila::push(int n){
  59.    node *nou;
  60.    nou=new node;
  61.    nou->num=n;
  62.    nou->seg=cap;
  63.    cap=nou;
  64.  
  65. }
  66.  
  67. pila & pila::operator << (const int num){
  68. push(num);
  69. return *this;}
  70.  
  71. int main(int argc, char **argv){
  72.    pila p1;
  73.    int num;
  74.    ifstream fitx;
  75.    fitx.open(argv[1]);
  76.  
  77.    if(!fitx){
  78.        cerr << "error opertura fitxer" << endl;
  79.        return -1;}
  80.  
  81.    while(fitx >> num){
  82.    cout << num << endl;
  83.    //p1.push(num);
  84.    p1 << num;
  85.    }
  86.  
  87.    if(!p1.buidap())
  88.        cerr << "pila amb elements" << endl;
  89.  
  90.    while(!p1.buidap()){
  91.    cout << p1.pop() << endl;
  92.    }
  93.  
  94.    if(p1.buidap())
  95.        cerr << "WARNING: pila buida" << endl;
  96.  
  97.    fitx.close();
  98.    return 0;
  99. }
  100.  

contenido de class_pila.txt:
Código:
1
5
6
7
10
20
50


« Última modificación: 5 Octubre 2010, 16:26 pm por Akai » En línea

Garfield07


Desconectado Desconectado

Mensajes: 1.121


¡Este año voy a por todas! JMJ 2011


Ver Perfil WWW
Re: Ejecutar programas en Windows sin necesidad de pausas (system (pause) etc)
« Respuesta #1 en: 5 Octubre 2010, 20:00 pm »

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


En línea



* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo
flony


Desconectado Desconectado

Mensajes: 584



Ver Perfil
Re: Ejecutar programas en Windows sin necesidad de pausas (system (pause) etc)
« Respuesta #2 en: 16 Octubre 2010, 19:18 pm »

si es verdad los que salimos del bat se nos hace dificil si no tenemos pause....para ver q esta haciendo el code
En línea

si un problema no tiene solucion entonces no es un problema...es algo inevitable
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Los procesadores ARM no podrán ejecutar programas antiguos en Windows 8
Noticias
wolfbcn 6 3,665 Último mensaje 20 Mayo 2011, 10:41 am
por Kase
Pregunta noob: ¿Pause o no pause? C++ « 1 2 »
Programación C/C++
Puntoinfinito 14 10,851 Último mensaje 8 Agosto 2012, 19:24 pm
por X3R4CK3R
Error en windows xp, no puedo ejecutar programas.
Seguridad
Didy 0 2,892 Último mensaje 6 Diciembre 2012, 19:53 pm
por Didy
Cómo ejecutar programas viejos en Windows 8
Noticias
wolfbcn 0 1,706 Último mensaje 19 Noviembre 2014, 14:20 pm
por wolfbcn
Compilar y ejecutar sin necesidad de tener las .DLL'S
Programación C/C++
#Aitor 2 2,495 Último mensaje 24 Febrero 2018, 19:28 pm
por #Aitor
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines