Últimamente, he estado tratando de aprender C++ de este sitio web. Por desgracia, cada vez que intento ejecutar uno de los ejemplos de código, veo que el programa abierto durante aproximadamente medio segundo y, a continuación, cierre de inmediato. Es allí una manera de detener el programa de cierre de inmediato para que pueda ver los frutos de mi esfuerzo?

Se hace doble clic en el ejecutable? Estás trabajando en Windows? Por qué no están trabajando desde el shell de Comandos y escribir los comandos que desea ejecutar?
Lott: Porque si se presiona el botón «Ir» en el IDE de que usted no tiene que molestarse con una consola.
Usted debe considerar la obtención de un buen libro para aprender C++. Los sitios web son un buen recurso, pero no son rivales para un buen texto introductorio. No hay una lista definitiva de C++ libros aquí: stackoverflow.com/questions/388242/…
Si al presionar el botón se cierra la aplicación cuando se termina, se utiliza el mal IDE.
Le preguntó y respondió anteriormente aquí: stackoverflow.com/questions/902261/… , a pesar de que este tiene un mejor título.

OriginalEl autor Adam P | 2010-03-27

30 Comentarios

  1. 107

    Edición: Como Charles Bailey señala con razón en un comentario más abajo, que esto no funcionará si hay caracteres en el búfer de stdin, y realmente no hay una buena manera de evitar eso. Si usted está funcionando con un depurador, Juan Dibling de la propuesta de solución es, probablemente, el más limpio de la solución a su problema.

    Que dijo, voy a dejar esto aquí y tal vez alguien le resultará útil. Lo he utilizado mucho como un truco rápido de tipo al escribir las pruebas durante el desarrollo.


    Al final de su main función, usted puede llamar a std::getchar();

    De esta manera se consigue un único carácter de stdin, lo que te da la «presione cualquier tecla para continuar» tipo de comportamiento (si usted realmente desea un «presione cualquier tecla» del mensaje, tendrás que imprimir uno mismo).

    Necesita #include <cstdio> para getchar.

    getchar no resuelve el problema – o sólo en circunstancias limitadas, al menos. Lee un caracter de stdin, pero si ya hay caracteres en el búfer de stdin el programa va a continuar sin esperar independientemente de si desea imprimir un mensaje o no.
    Un buen punto. Ignorando hasta \n es una solución parcial, pero no va a ayudar si hay más de una línea de entrada se almacenan en la memoria. No sé de un estándar de C++ para borrar todo de un flujo de entrada. :-/
    Viejo, pero ¿ std::cin.ignore(std::cin.rdbuf()->in_avail()); ? Lo tengo desde here.
    Una opción que yo uso mucho es std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); con #include <limits>.
    Por favor, no hagas esto. 🙁 No es parte de su programa la función de hacer esto.

    OriginalEl autor James McNellis

  2. 129

    Si está utilizando Visual Studio y está iniciando la aplicación de consola de la IDE:

    presionando CTRL-F5 (iniciar sin depurar) iniciará la aplicación y mantener abierta la ventana de consola hasta que se pulse cualquier tecla.

    Perfecto! He estado plagada de esto por tanto tiempo y que esto funcionó.
    Iniciar la consola de la IDE? Cómo y por qué lo harían?
    Excelente, funcionó. ¿Por qué no es el comportamiento predeterminado de Visual Studio?
    Yo también pensaba que era la manera de hacerlo, hasta el día de hoy, cuando voy a construir un sencillo programa de la consola y el método anterior no funciona 🙁

    OriginalEl autor nabulke

  3. 92

    La solución por James funciona para todas las Plataformas.

    Alternativamente en Windows usted puede también agregar el siguiente justo antes de que regrese de main función:

      system("pause");

    Esto ejecutará el pause comando que espera hasta que se presione una tecla y se muestra un mensaje bonito Press any key to continue . . .

    Eso suena como una de Rube Goldberg variación de una solución.
    Van den Eynde: también Es bastante común y viene de serie en el código repetitivo en DevCPP. +1
    por otro lado, se hace claro que esto es sólo un bodge por ejemplo, mientras std:getch podría ser accidentalmente a la izquierda en el código real.
    Esta es una solución perfectamente válida para aquellos en Windows. Aunque no ideal, que hace el trabajo
    Más fácil, más rápida, solución. Justo lo que necesitaba

    OriginalEl autor codaddict

  4. 70

    Si está utilizando Microsoft Visual C++ 2010 Express y correr hacia el problema con CTRL+F5 no funciona para mantener la consola abierta después de que el programa ha terminado, echa un vistazo a este hilo de MSDN.

    Probable que el IDE se establece para cerrar la consola después de un CTRL+F5 para ejecutar; de hecho, un «Proyecto Vacío» en Visual C++ 2010 cierra la consola por defecto. A cambio de ello, como el de Microsoft Moderador sugerido:

    Por favor haga clic en el nombre del proyecto y vaya a Propiedades de la página, por favor, expanda Configuración de Propiedades -> Enlazador -> Sistema, por favor, seleccione de la Consola (/SUBSYSTEM:CONSOLA) en el Subsistema de la lista desplegable. Porque, por defecto, el Vacío proyecto no especifica.

    ¿Y si no es una aplicación de consola?
    Esta es la respuesta correcta. Gracias.
    Esto es totalmente la respuesta como la mejor, las otras respuestas son hacks.
    Esto solo funciona si se abre sin el depurador (Ctrl+F5).
    Esto no funciona para Makefile proyectos.

    OriginalEl autor Mr. Underhill

  5. 18

    Por lo general basta con poner un punto de interrupción en main()‘s de la llave de cierre. Cuando el final del programa, por cualquier medio, el punto de interrupción se golpeó y se puede ALT-Tab a la ventana de la consola para ver el resultado.

    OriginalEl autor John Dibling

  6. 13

    ¿Por qué no sólo tiene que ejecutar el programa desde una consola, es decir ejecutar el programa de cmd.exe si estás usando Windows. De esa manera, la ventana permanece abierta después de que el programa termine.

    [EDITAR]: Cuando yo uso KDevelop4 hay un completo instancia de Bash (un Linux CLI) que se ejecuta en una ficha en la parte inferior de la IDE. Que es lo que yo uso en este tipo de circunstancias.

    Porque si usted está usando un IDE no generalmente el uso de una consola. Empuje ir, se ejecuta el programa, y eso es todo.
    Cualquier competente IDE de mantener la consola en la pantalla cuando la aplicación termina – Code::Blocks, por ejemplo, hace exactamente esto.
    Me lo imaginé. Para obtener la ventana para quedarse, usted tiene que tener /SUBSYSTEM:CONSOLA en el vinculador de la línea de comandos. La documentación dice que este es el valor predeterminado si main está definido, pero si no se establece explícitamente en la línea de comandos, VS mata a la ventana cuando sale de la aplicación. suspiro
    que es necesario para obtener una ventana de consola en el primer lugar. Que a su vez requiere de main() en lugar de WinMain(), no la otra manera alrededor. Estoy un poco perdido…
    Si usted comienza a partir de un «Proyecto Vacío» en lugar de «Aplicación de Consola Win32» el subsistema no se establece explícitamente en las propiedades del proyecto. Si se define main en el proyecto, el vinculador por defecto utiliza el subsistema de CONSOLA. Cuando la depuración o en ejecución, usted obtendrá una ventana de la consola. Sin embargo, a menos que se especifique de forma explícita de la CONSOLA como el subsistema en las propiedades del proyecto, Visual Studio no mantener abierta la ventana de consola. Yo siempre inicio de un proyecto vacío y yo rara vez cambiar las propiedades del proyecto, por lo que nunca he visto a la ventana de la consola de alrededor de palo. Lo siento por la confusión

    OriginalEl autor Amos

  7. 8

    Llamada cin.get(); 2 veces:

        //...
        cin.get();
        cin.get();
        return 0
    }
    pero ¿por qué dos veces ??
    lo que si necesitamos otra cin.get() para obtener, por ejemplo, algunos cadena dentro de la matriz antes de esto? No trabajo en este escenario.

    OriginalEl autor tsx

  8. 8

    Antes del final de su código, insertar esta línea:

    system("pause");

    Esto mantendrá la consola hasta que se pulse una tecla.

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main()
    {
        string s;
        cout << "Please enter your first name followed by a newline\n";
        cin >> s;
        cout << "Hello, " << s << '\n';
        system("pause"); //<----------------------------------
        return 0; //This return statement isn't necessary
    }
    También imprimió «Presione cualquier tecla para continuar . . .» para mí.
    Esto funcionó para mí en el getchar()

    OriginalEl autor robert

  9. 4

    Si ejecuta el código de un competente IDE, tales como Code::Blocks, el IDE se encargará de gestionar la consola se utiliza para ejecutar el código, manteniéndolo abierto cuando se cierra la aplicación. Usted no desea agregar un código especial para mantener la consola abierta, ya que esto impedirá que funcione correctamente cuando se utiliza para la real, fuera de la IDE.

    OriginalEl autor

  10. 3

    Bueno supongo que usted está en Windows con Visual Studio… ¿por qué? Bien porque si estás en algún tipo de sistema operativo Linux, entonces usted probablemente estaría ejecutando desde la consola.

    De todos modos, usted puede agregar una mierda al final de su programa al igual que otros están sugiriendo, o sólo puede golpear CTRL + F5 (iniciar sin depurar) y Visual Studio saldrá de la consola, una vez que se completa.

    Otra opción si desea ejecutar la versión de Depuración y no añadir a la mierda a su código para abrir la ventana de la consola (Inicio -> Ejecutar -> cmd) y vaya a su la salida de Depuración directorio. Luego, ingrese el nombre de su ejecutable y se ejecutará su programa de depuración de la consola. Usted puede utilizar Visual Studio para adjuntar al proceso o algo si usted realmente desea.

    OriginalEl autor Polaris878

  11. 2

    Si en realidad la depuración de la aplicación en Visual C++, presione F5 o el triángulo verde en la barra de herramientas. Si usted no está realmente en la depuración de ella (que no tienen los puntos de corte establecidos), presione Ctrl+F5 o elija Iniciar Sin Depurar en los menús (normalmente en el menú Depurar, que estoy de acuerdo es confuso.) Va a ser un poco más rápido, y lo que es más importante para usted, hará una pausa en la final sin tener que cambiar el código.

    Alternativamente, abra un símbolo del sistema, vaya a la carpeta donde el archivo exe y ejecutarlo escribiendo su nombre. De esa manera cuando se termine de ejecutar el símbolo del sistema, no se cierra y usted puede ver la salida. Yo prefiero ambos de estos métodos para añadir código que se detiene la aplicación así como su acabado.

    OriginalEl autor Kate Gregory

  12. 2

    Simplemente agregue lo siguiente al final de su programa. Se va a tratar de capturar alguna forma de entrada de usuario, por lo tanto se detiene la consola se cierre automáticamente.

    cin.get();

    OriginalEl autor

  13. 2

    Agregar las siguientes líneas antes de cualquier exit() función o antes de cualquier returns en main():

    std::cout << "Paused, press ENTER to continue." << std::endl;
    cin.ignore(100000, "\n");
    Esto no funciona para mí, la primera línea de las obras, sino de presionar enter no hace nada
    El cambio de este a cin.ignore(); obras

    OriginalEl autor Thomas Matthews

  14. 2

    Para Visual Studio (y sólo Visual Studio) el siguiente fragmento de código le da un ‘esperar la pulsación de tecla para continuar» preguntar que realmente espera a que el usuario presione una nueva clave explícitamente, por primera vaciar el búfer de entrada:

    #include <cstdio>
    #include <tchar.h>
    #include <conio.h>
    
    _tprintf(_T("Press a key to continue "));
    while( _kbhit() /* defined in conio.h */ ) _gettch();
    _gettch();

    Tenga en cuenta que este utiliza el tchar.h macro para ser compatible con múltiples conjuntos de caracteres’ (como VC++ llama).

    OriginalEl autor MicroVirus

  15. 2

    Acabo de hacer esto:

    //clear buffer, wait for input to close program
    std::cin.clear(); std::cin.ignore(INT_MAX, '\n');
    std::cin.get();
    return 0;

    Nota: la limpieza de la cin búfer y tan sólo es necesario si usted ha usado cin en algún momento anterior en el programa. También el uso de std::numeric_limits::max() es probablemente mejor que INT_MAX, pero es un poco prolijo y generalmente innecesario.

    Funciona, pero el return 0; no se ejecutará si puedo usar este código.

    OriginalEl autor GuestPerson00001

  16. 1

    Uso #include "stdafx.h" & system("pause"); como el código de abajo.

    #include "stdafx.h"
    #include <iostream>
    using namespace std;
    int main()
    {
        std::cout << "hello programmer!\n\nEnter 2 numbers: ";
        int x, y;
        std::cin >> x >> y;
        int w = x*y;
        std::cout <<"\nyour answer is: "<< w << endl;
        system("pause");
    }

    OriginalEl autor Mohammed Nouh

  17. 1

    Idea Similar a la yeh respuesta, sólo minimalista alternativa.

    Crear un archivo por lotes con el siguiente contenido:

    helloworld.exe
    pause

    A continuación, utilizar el archivo de proceso por lotes.

    OriginalEl autor Cœur

  18. 1
    #include "stdafx.h"
    #include <iostream>
    #include <conio.h>
    
    using namespace std;
    
    int main()
    {
    
        cout << "Press any key to continue...";
        getch();
    
        return 0;
    }

    Yo no aviso a nadie este post así que aquí está.

    Me gustaría añadir que conio.h es un Windows específica del encabezado y puede no estar disponible en todas las máquinas (o usted puede ser que necesite para enlace por separado, lo cual es una exageración).

    OriginalEl autor Ruan

  19. 0

    Ver si el IDE tiene una casilla de verificación en la configuración del proyecto para mantener la ventana abierta después de que el programa termina. Si no, utilice std::cin.get(); para leer un carácter al final de la función principal. Sin embargo, asegúrese de utilizar únicamente basado en la línea de entrada (std::getline), o para lidiar con los restos no leídos personajes de otra manera (std::ignorar hasta newline) porque de lo contrario la .get() al final sólo leer la basura que la izquierda no leídos anteriormente.

    OriginalEl autor Tronic

  20. 0

    Esto parece funcionar bien:

    cin.clear();
    cin.ignore(2);

    Si borrar el búfer de la primera no será un problema al leer el siguiente.
    Por alguna razón cin.ignore(1) no funciona, tiene que ser 2.

    2 es también a veces no es suficiente (cuando hay más de teclas en la cola). La forma correcta es ignorar como muchos de los personajes como en la cola. A con, cin.rdbuf()->in_avail. No un número mágico, como 1 o 2.
    Este no es un trabajo!

    OriginalEl autor Northcode

  21. 0

    Todo lo que tienes que hacer establecer una variable x, a continuación, escriba esto en antes del return 0;

    cout<<"\nPress any key and hit enter to end...";
    cin>>x;

    OriginalEl autor Friendly advice

  22. 0

    Usted puede incluso declarar un número entero en el comienzo de su main() función (es decir int a;) y poner std::cin >> a; justo antes de que el valor de retorno. Así que el programa seguirá funcionando hasta que se presione una tecla y entrar.

    OriginalEl autor Izza

  23. 0

    Que siempre se puede simplemente crear un archivo por lotes. Por ejemplo, si su programa se llama helloworld.exe, el código sería:

    @echo off
    :1
    cls
    call helloworld.exe
    pause >nul
    goto :1

    OriginalEl autor yeh

  24. 0

    Me voy a poner un punto de interrupción en la última vuelta 0 del programa. Funciona bien.

    Esto no proporciona una respuesta a la pregunta. Para la crítica o la solicitud de aclaración de un autor, deja un comentario debajo de su post – siempre se puede comentar en tu blog, y una vez que usted tiene suficiente la reputación usted será capaz de comentario en cualquier post.
    Cómo no dar respuesta? Estoy en exactamente la misma situación, como autor de una pregunta y esto ayuda.

    OriginalEl autor lierosk

  25. 0

    He utilizado cin.get() y que es trabajado, pero un día tuve que usar otro cin.get([Array Variable]) antes que agarrar un ling de la cadena con el carácter en blanco en medio de. así que el cin.get() no evitar la ventana de símbolo del sistema de cierre. Finalmente he encontrado Otra manera:
    Pulse CTRL+F5 para abrir en una ventana externa y Visual Studio no tiene control sobre eso. Sólo le pido que sobre el cierre después de final de comandos que se ejecutan.

    OriginalEl autor QMaster

  26. 0

    He intentado poner un getchar() función en la final. Pero no funcionó. Así que lo que hice fue agregar dos getchar() funciones uno después de otro. Creo que la primera getchar() absorbe el Entrar clave de prensa después de la última entrada de datos. Así que trate de añadir dos getchar() funciones en lugar de una

    OriginalEl autor Samriddhi Sinha

  27. 0

    Lugar de pulsar el botón de ejecución, presione la tecla CTRL y F5 al mismo tiempo, se le dará la presione cualquier tecla para continuar mensaje. O tipo «(advertencia utilice esta solo para pruebas, no en programas como los antivirus no me gusta!!!!)» al final de su principal función, pero: (advertencia utilice esta solo para pruebas, no en programas como los antivirus no me gusta!!!!)

    OriginalEl autor anony

  28. 0

    solo uso cin.ignore() justo antes de return 0; dos veces

    main()
      {
      //your codes 
    
      cin.ignore();
      cin.ignore();
    
      return 0;
      }

    eso es todo

    Yo suelo hacer esto algo como esto. cin.ignore(); cin.get();

    OriginalEl autor Kursat Turkay

  29. -1

    Si está ejecutando Windows, entonces usted puede hacer system("pause >nul"); o system("pause");. Se ejecuta un comando de consola para pausar el programa hasta que se pulse una tecla. >nul impide diciendo Press any key to continue....

    OriginalEl autor PatThaCoder

Dejar respuesta

Please enter your comment!
Please enter your name here