¿Cómo detener la aplicación de consola C ++ para salir inmediatamente?

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

Editar: Como señala correctamente Charles Bailey en un comentario a continuación, esto no funcionará si hay caracteres almacenados en el modo almacenado en stdin , y realmente no hay una buena manera de evitarlo. Si está ejecutando un depurador conectado, la solución sugerida por John Dibling es probablemente la solución más limpia para su problema.

Dicho esto, dejaré esto aquí y tal vez alguien más lo encuentre útil. Lo he usado mucho como un truco rápido al escribir pruebas durante el desarrollo.


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

Esto obtendrá un solo carácter de stdin , dándole el tipo de comportamiento de “presionar cualquier tecla para continuar” (si realmente quiere un mensaje de “presione cualquier tecla”, tendrá que imprimir uno).

Necesitas #include para getchar .

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

presionar CTRL-F5 (iniciar sin depurar) iniciará la aplicación y mantendrá la ventana de la consola abierta hasta que presione cualquier tecla.

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

Alternativamente en Windows también puede agregar lo siguiente justo antes de regresar de la función main :

  system("pause"); 

Esto ejecutará el comando de pause que espera hasta que presione una tecla y también muestre un bonito mensaje. Press any key to continue . . . Press any key to continue . . .

Si está utilizando Visual C ++ 2010 Express de Microsoft y se encuentra con el problema con CTRL + F5 que no funciona para mantener abierta la consola una vez que el progtwig ha finalizado, eche un vistazo a este subproceso 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 -> Enlazador -> Sistema, seleccione Consola (/ SUBSISTEMA: CONSOLA) en el menú desplegable SubSistema. Porque, de forma predeterminada, el proyecto Vacío no lo especifica.

Usualmente pongo un punto de interrupción en el corsé de cierre de main() . Cuando se llega al final del progtwig por cualquier medio que scope el punto de interrupción, puede ALT-Tabizar la ventana de la consola para ver la salida.

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

[EDIT]: 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.

Llamar cin.get(); 2 veces:

  //... cin.get(); cin.get(); return 0 } 

Antes de que termine tu código, inserta esta línea:

 system("pause"); 

Esto mantendrá la consola hasta que toques una tecla.

 #include  #include  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 } 

Si ejecuta su código desde un IDE competente, como Code :: Blocks , el IDE administrará la consola que utiliza para ejecutar el código, manteniéndolo abierto cuando se cierre la aplicación. No desea agregar un código especial para mantener la consola abierta, ya que esto impedirá que funcione correctamente cuando la use de manera real, fuera del IDE.

De acuerdo, supongo que estás en Windows usando Visual Studio … ¿por qué? Bueno, si estás en algún tipo de sistema operativo Linux, probablemente lo estarías ejecutando desde la consola.

De todos modos, puede agregar mierda al final de su progtwig como sugieren otros, o puede presionar CTRL + F5 (iniciar sin depuración) y Visual Studio abandonará la consola una vez que esté completa.

Otra opción si desea ejecutar la versión de depuración y no agregar basura a su código es abrir la ventana de la consola (Inicio -> Ejecutar -> cmd) y navegar a su directorio de salida de depuración . Luego, solo ingrese el nombre de su ejecutable y ejecutará su progtwig de depuración en la consola. A continuación, puede usar la conexión de Visual Studio para procesar o algo si realmente lo desea.

Si en realidad está depurando su aplicación en Visual C ++, presione F5 o el triángulo verde en la barra de herramientas. Si realmente no lo está depurando (no tiene ningún punto de interrupción configurado), presione Ctrl + F5 o elija Iniciar sin depuración en los menús (generalmente estoy en el menú Depurar, lo cual estoy de acuerdo es confuso). Será un poco más rápido, y lo más importante para ti, pausará al final sin tener que cambiar tu código.

De forma alternativa, abra un símbolo del sistema, navegue a la carpeta donde está su ejecutable y ejecútelo escribiendo su nombre. De esta forma, cuando termine de ejecutarse, el símbolo del sistema no se cierra y puede ver el resultado. Prefiero ambos métodos para agregar código que detiene la aplicación cuando termina.

Simplemente agregue lo siguiente al final de su progtwig. Tratará de capturar alguna forma de entrada del usuario, por lo tanto, evita que la consola se cierre automáticamente.

 cin.get(); 

Agregue las siguientes líneas antes de cualquier función exit() o antes de cualquier return s en main() :

 std::cout << "Paused, press ENTER to continue." << std::endl; cin.ignore(100000, "\n"); 

Para Visual Studio (y solo para Visual Studio), el siguiente fragmento de código le da un aviso de ‘espera para que continúe la pulsación de tecla’ que verdaderamente espera que el usuario presione una nueva clave de forma explícita, primero lavando el búfer de entrada:

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

Tenga en cuenta que esto utiliza la macro tchar.h para ser compatible con múltiples “juegos de caracteres” (como los llama VC ++).

Solo hago esto:

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

Nota: borrar el buffer cin y tal solo es necesario si has usado cin en algún punto anterior de tu progtwig. También usar std :: numeric_limits :: max () es probablemente mejor que INT_MAX, pero es un poco prolijo y generalmente innecesario.

Use #include "stdafx.h" & system("pause"); al igual que el código a continuación.

 #include "stdafx.h" #include  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"); } 

Idea similar a tu respuesta, solo alternativa minimalista.

Crea un archivo por lotes con el siguiente contenido:

 helloworld.exe pause 

Luego use el archivo por lotes.

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

No me di cuenta de que alguien más publica esto, así que aquí está.

Vea si su IDE tiene una checkbox en la configuración del proyecto para mantener la ventana abierta después de que el progtwig finaliza. Si no, use std::cin.get(); para leer un personaje al final de la función principal. Sin embargo, asegúrese de usar solo entrada basada en línea (std :: getline) o tratar con los caracteres no leídos restantes de lo contrario (std :: ignore hasta nueva línea) porque de lo contrario el .get () al final solo leerá la basura que dejó no leído anteriormente.

Esto parece funcionar bien:

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

Si borra el búfer primero, no será un problema cuando lea el siguiente. Por algún motivo, cin.ignore(1) no funciona, tiene que ser 2.

Todo lo que tiene que hacer es establecer una variable para x y luego escribir esto antes de la vuelta 0;

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

Incluso puede declarar un entero al principio de su función main() (digamos int a; ) y poner std::cin >> a; justo antes del valor de retorno. Entonces, el progtwig seguirá funcionando hasta que presione una tecla e ingrese.

Siempre puedes simplemente crear un archivo por lotes. Por ejemplo, si su progtwig se llama helloworld.exe, algún código sería:

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

Estoy colocando un punto de interrupción en la última vuelta 0 del progtwig. Funciona bien.

simplemente

 int main(){ // code... getchar(); getchar(); return 0; } 

cin.get() y eso funciona, pero un día necesité usar otro cin.get([Array Variable]) antes de eso para agarrar una cuerda ling con un carácter en blanco en medio de. por lo que cin.get() no evitó que se cerrara la ventana del símbolo del sistema. Finalmente encontré otra forma: presione CTRL + F5 para abrir en una ventana externa y Visual Studio ya no tiene control sobre ella. Solo le preguntará sobre el cierre después de ejecutar los comandos finales.

Intenté poner una función getchar() al final. Pero no funcionó. Entonces, lo que hice fue agregar dos funciones de getchar() una tras otra. Creo que el primer getchar() absorbe la tecla Enter que presionas después de la última entrada de datos. Intente agregar dos funciones getchar() lugar de una

En lugar de presionar el botón de ejecución, presione CTRL y F5 al mismo tiempo, le dará la prensa cualquier tecla para continuar el mensaje. O tipee “(¡¡Advertencia: ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡” ¡me gusta!

simplemente use cin.ignore () justo antes de devolver 0; dos veces

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

eso es todo

Si está ejecutando Windows, puede hacer system("pause >nul"); o system("pause"); . Ejecuta un comando de consola para pausar el progtwig hasta que presione una tecla. >nul impide decir Press any key to continue...