ventana salir que pause mantener funcion evitar ejecutar dev consola cierre cierra cerrar abierta c++ console exit terminate c++-faq

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



salir en c++ (30)

Ú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 programa se abre durante aproximadamente medio segundo y luego se cierra de inmediato. ¿Hay alguna manera de evitar que el programa se cierre de forma inmediata para que pueda ver los frutos de mi esfuerzo?


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

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


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");


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

system("pause");

Esto mantendrá la consola hasta que toques 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 }


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


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!


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.


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


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.


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 programa seguirá funcionando hasta que presione una tecla e ingrese.


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


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


Llamar cin.get(); 2 veces:

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


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 <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 esto utiliza la macro tchar.h para ser compatible con múltiples "juegos de caracteres" (como los llama VC ++).


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.


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.


Si está ejecutando Windows, puede hacer system("pause >nul"); o system("pause"); . Ejecuta un comando de consola para pausar el programa hasta que presione una tecla. >nul impide decir 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 programa 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.


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.


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

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


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

cin.get();


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 programa. También usar std :: numeric_limits :: max () es probablemente mejor que INT_MAX, pero es un poco prolijo y generalmente innecesario.


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;


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

#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"); }


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


Vea si su IDE tiene una casilla de verificación en la configuración del proyecto para mantener la ventana abierta después de que el programa 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.


simplemente

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


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

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

eso es todo


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.


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 <cstdio> para getchar .


#include "stdafx.h" #include <iostream> #include <conio.h> 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á.