ejecutar - Evitar que la ventana de la consola se cierre en la aplicación de consola Visual Studio C/C++
evitar que se cierre ventana cmd (17)
Esta es probablemente una pregunta embarazosa ya que sin duda la respuesta es cegadora.
He usado Visual Studio durante años, pero esta es la primera vez que hago un desarrollo de ''Aplicación de consola''.
Cuando ejecuto mi aplicación, aparece la ventana de la consola, aparece el resultado del programa y luego la ventana se cierra a medida que se cierra la aplicación.
¿Hay alguna forma de mantenerlo abierto hasta que haya verificado la salida o ver los resultados después de que la ventana se haya cerrado?
(/ SUBSYSTEM: CONSOLE) no funcionó para mi vs2013 (ya lo tenía).
"ejecutar sin depurar" no es una opción, ya que no quiero cambiar entre la depuración y ver la salida.
Terminé con
int main() {
...
#if _DEBUG
LOG_INFO("end, press key to close");
getchar();
#endif // _DEBUG
return 0;
}
Solución utilizada en qtcreator pre 2.6. Ahora mientras qt está creciendo, vs va por otro lado. Como recuerdo, en vs2008 no necesitábamos tales trucos.
Aquí hay una forma de C / C ++:
#include <stdlib.h>
#ifdef _WIN32
#define WINPAUSE system("pause")
#endif
Ponga esto en la parte superior de su programa y, si está en un sistema Windows ( #ifdef _WIN32
), se creará una macro llamada WINPAUSE
. Cuando quiera que su programa se detenga, llame a WINPAUSE;
y pausará el programa, usando el comando DOS. Para otros sistemas como Unix / Linux, la consola no debería cerrarse en la salida del programa de todos modos.
Aquí hay una solución que (1) no requiere ningún cambio de código o puntos de interrupción, y (2) se detiene después de la finalización del programa para que pueda ver todo lo que se imprimió. Se pausará después de F5 o Ctrl + F5. El principal inconveniente es que en VS2013 Express (según lo probado), no carga símbolos, por lo que la depuración es muy restringida.
Crear un archivo por lotes. Llamé a la mía
runthenpause.bat
, con los siguientes contenidos:%1 %2 %3 %4 %5 %6 %7 %8 %9 pause
La primera línea ejecutará cualquier comando que proporcione y hasta ocho argumentos. La segunda línea hará ... pausa.
Abra las propiedades del proyecto | Propiedades de configuración | Depuración
- Cambie "Argumentos del comando" a
$(TargetPath)
(o lo que sea que esté en "Comando"). - Cambie "Comando" a la ruta completa a
runthenpause.bat
. - Pulsa OK.
Ahora, cuando ejecute, runthenpause.bat
iniciará su aplicación y, una vez que haya finalizado, se detendrá para que vea la salida de la consola.
Publicaré una actualización si averiguo cómo cargar los símbolos. /Z7
por this pero sin éxito.
Cualquiera de los dos utilizar
-
cin.get();
o
-
system("pause");
Asegúrese de hacer cualquiera de ellos al final de la función main()
y antes de la declaración de return
.
Haz click derecho en tu proyecto
Propiedades> Propiedades de configuración> Vinculador> Sistema
seleccione Consola (/ SUBSISTEMA: CONSOLA) en la opción SubSystem
.
Ahora inténtalo ... debería funcionar
Ir a Menú de depuración-> Presione Inicio Sin Complemento
Podría ejecutar su ejecutable desde un símbolo del sistema. De esta manera podías ver toda la salida. O, podrías hacer algo como esto:
int a = 0;
scanf("%d",&a);
return YOUR_MAIN_CODE;
y de esta manera, la ventana no se cerrará hasta que ingrese datos para a
variable.
Si ejecuta sin depurar (Ctrl + F5), entonces, de manera predeterminada, le indica que presione para regresar para cerrar la ventana. Si desea utilizar el depurador, debe colocar un punto de interrupción en la última línea.
Si está utilizando .NET, ponga Console.ReadLine()
antes del final del programa.
Se esperará a <ENTER>
.
Simplemente presione CNTRL + F5 para abrirlo en una ventana de línea de comandos externa (Visual Studio no tiene control sobre ella).
Si esto no funciona, agregue lo siguiente al final de su código:
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
Esta espera para que presione una tecla para cerrar la ventana del terminal una vez que el código haya llegado al final.
Si desea hacer esto en varios lugares, coloque el código anterior en un método (por ejemplo, private void Pause()
) y llame a Pause()
cuando un programa llegue a un final posible.
También puedes usar esta opción.
#include <conio.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main() {
.
.
.
getch();
return 0;
}
Una solución algo mejor:
atexit([] { system("PAUSE"); });
Al comienzo de tu programa.
Pros:
- puede usar std :: exit ()
- Puede tener múltiples devoluciones desde principal
- Puede ejecutar su programa bajo el depurador
- IDE independiente (+ SO independiente si utiliza
cin.sync(); cin.ignore();
truco en lugar desystem("pause");
)
Contras:
- tiene que modificar el codigo
- no se detendrá en std :: terminate ()
- seguirá ocurriendo en su programa fuera de la sesión IDE / depurador; Puedes prevenir esto bajo Windows usando:
extern "C" int __stdcall IsDebuggerPresent(void);
int main(int argc, char** argv) {
if (IsDebuggerPresent())
atexit([] {system("PAUSE"); });
...
}
Utilice console.readline
. Lo tuyo es escribir la línea pero no leerla.
Visual Studio 2015 , con importaciones . Porque odio cuando los ejemplos de código no dan las importaciones necesarias.
#include <iostream>;
int main()
{
getchar();
return 0;
}
añadir “| pausa ”en el cuadro de argumentos del comando en la sección de depuración en las propiedades del proyecto.
intente llamar a getchar()
justo antes de que main()
regrese.
simplemente ponga como su última línea de código:
system("pause");