¿Cómo evitar que la aplicación de consola C++ se cierre inmediatamente?

5 minutos de lectura

¿Como evitar que la aplicacion de consola C se cierre
Adán P.

Últimamente, he estado tratando de aprender C++ de este sitio web. Desafortunadamente, cada vez que intento ejecutar uno de los ejemplos de código, veo que el programa se abre durante aproximadamente medio segundo y luego se cierra de inmediato. ¿Hay alguna forma de evitar que el programa se cierre inmediatamente para que pueda ver los frutos de mi esfuerzo?

  • ¿Estás haciendo doble clic en el ejecutable? ¿Estás trabajando en Windows? ¿Por qué no está trabajando desde el shell de comandos y escribiendo los comandos como quiere que se ejecuten?

    – S. Lott

    27 de marzo de 2010 a las 14:34

  • @S Lott: Porque si presiona el botón “Ir” en su IDE, no necesita molestarse con una consola.

    – Billy ONeal

    27 de marzo de 2010 a las 14:38

  • Debería considerar obtener un buen libro para aprender C ++. Los sitios web son buenos recursos, pero no son rival para un buen texto introductorio. Hay una lista definitiva de libros de C++ aquí: stackoverflow.com/questions/388242/…

    –James McNellis

    27 de marzo de 2010 a las 14:39

  • @Billy Si al presionar el botón Ir se cierra la aplicación cuando finaliza, está utilizando el IDE incorrecto.

    luego

    27 de marzo de 2010 a las 14:48

  • Preguntado y respondido anteriormente aquí: stackoverflow.com/questions/902261/… , aunque este tiene un título mejor.

    – dmckee — gatito ex-moderador

    27 de marzo de 2010 a las 15:33

¿Como evitar que la aplicacion de consola C se cierre
james mcnellis

Editar: Como Charles Bailey señala acertadamente en un comentario a continuación, esto no funcionará si hay caracteres almacenados en búfer en stdin, y realmente no hay una buena manera de evitar eso. Si está ejecutando con un depurador adjunto, la solución sugerida por John Dibling es probablemente la solución más limpia para su problema.

Dicho esto, dejaré esto por aquí y tal vez a alguien más le resulte útil. Lo he usado mucho como una especie de truco rápido al escribir pruebas durante el desarrollo.


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

Esto obtendrá un solo carácter de stdinbrindándole así el tipo de comportamiento “presione cualquier tecla para continuar” (si realmente desea un mensaje de “presione cualquier tecla”, tendrá que imprimir uno usted mismo).

Necesitas #include <cstdio> por getchar.

  • getchar no resuelve el problema, o solo en circunstancias limitadas, al menos. Lee un char de stdinpero si ya hay caracteres almacenados en búfer desde stdin, el programa continuará sin esperar, independientemente de si imprime un aviso o no.

    –CB Bailey

    27 de marzo de 2010 a las 14:46

  • @Charles: Un buen punto. Ignorando hasta \n es una solución parcial, pero no ayudará si se almacena en búfer más de una línea de entrada. No conozco una forma estándar de C++ para borrar todo de un flujo de entrada. :-/

    –James McNellis

    27 de marzo de 2010 a las 15:44

  • @James: Viejo, pero ¿qué tal std::cin.ignore(std::cin.rdbuf()->in_avail());? Lo obtuve de aquí.

    – GManNickG

    3 oct 2010 a las 10:35

  • Una opción que uso mucho es std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); con #include <limits>.

    – Xeo

    29 de enero de 2011 a las 7:42


  • Por favor, no hagas esto. 🙁 No es parte de la función de su programa hacer esto.

    – Carreras de ligereza en órbita

    23 de diciembre de 2011 a las 11:42

1647556148 352 ¿Como evitar que la aplicacion de consola C se cierre
Sr. Underhill

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

Es probable que su IDE esté configurado para cerrar la consola después de ejecutar CTRL+F5; de hecho, un “Proyecto vacío” en Visual C++ 2010 cierra la consola de forma predeterminada. Para cambiar esto, haga lo que sugirió el moderador de Microsoft:

Haga clic con el botón derecho en el nombre de su proyecto y vaya a la página Propiedades, expanda Propiedades de configuración -> Vinculador -> Sistema, seleccione Consola (/ SUBSISTEMA: CONSOLA) en el menú desplegable Subsistema. Porque, por defecto, el proyecto Vacío no lo especifica.

  • Eso suena como una variación de Rube Goldberg de una solución.

    – Dave Van den Eynde

    27 de marzo de 2010 a las 14:36

  • @Dave Van den Eynde: También es bastante común y viene de serie en el código repetitivo de DevCPP. +1

    – Billy ONeal

    27 de marzo de 2010 a las 14:37


  • @Dave, por otro lado, deja en claro que esto es solo un ejemplo, mientras que std: getch podría dejarse accidentalmente en código real.

    – Martín Beckett

    27 de marzo de 2010 a las 17:10

  • Esta es una solución perfectamente válida para aquellos en Windows. Aunque no es ideal, funciona

    – thecoshman

    10 de octubre de 2012 a las 13:12

  • La solución más fácil y rápida. Justo lo que necesitaba

    – Cody Bugstein

    18 de diciembre de 2013 a las 12:53

Por lo general, solo pongo un punto de interrupción en main()‘s de cierre rizado. Cuando se alcance el final del programa por cualquier medio, se alcanzará el punto de interrupción y puede presionar ALT-Tab para ir a la ventana de la consola para ver el resultado.

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

[EDIT]Nota: Cuando uso KDevelop4, hay una instancia completa de Bash (una CLI de Linux) ejecutándose en una pestaña en la parte inferior del IDE. Que es lo que uso en este tipo de circunstancias.

1647556149 822 ¿Como evitar que la aplicacion de consola C se cierre
Pedro Mortensen

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

system("pause");

Esto mantendrá la consola hasta que presiones 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 mi.

    – PapaHotelPapa

    25 mayo 2016 a las 22:52

  • Podrías hacerlo system("pause > nul"); si desea que haga una pausa pero no envíe un texto a la consola que diga “Presione cualquier tecla para continuar…”.

    – madladzen

    25 oct 2020 a las 18:12

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad