Evitar que la ventana de la consola se cierre en la aplicación de consola Visual Studio C/C++


Esta es una pregunta probablemente embarazosa, ya que sin duda la respuesta es ciegamente obvia.

He utilizado Visual Studio durante años, pero esta es la primera vez que he hecho cualquier 'Aplicación de consola' desarrollo.

Cuando corro mi aplicación, aparece la ventana de la consola, aparece la salida del programa y luego la ventana se cierra cuando la aplicación sale.

¿ Hay una manera de mantenerla abierta hasta que haya comprobado la salida, o ver los resultados después de que la ventana haya cerrado?

Author: sorin, 2009-11-21

16 answers

Si se ejecuta sin depurar (Ctrl+F5), por defecto se le pide que presione retorno para cerrar la ventana. Si desea utilizar el depurador, debe poner un punto de interrupción en la última línea.

 392
Author: Tom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-21 16:00:45

Haga clic derecho en su proyecto

Propiedades>Propiedades de configuración> Enlazador > Sistema

Seleccione Consola (/SUBSISTEMA:CONSOLA) en la opción SubSystem.

Ahora inténtalo it...it debería funcionar

 163
Author: Viraj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-24 06:14:30

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), entonces creará una macro llamada WINPAUSE. Cada vez que desee que su programa se detenga, llame a WINPAUSE; y pausará el programa, utilizando el comando DOS. Para otros sistemas como Unix / Linux, la consola no debe salir al salir del programa de todos modos.

 43
Author: Shaun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-22 15:05:40

Ir al menú de depuración- > Presionar Comienza sin debugging

 24
Author: pashaplus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-28 09:24:32

Si está utilizando.NET, ponga Console.ReadLine() antes del final del programa.

Esperará a <ENTER>.

 18
Author: Cheeso,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-21 16:11:53

Intenta llamar a getchar() justo antes de que vuelva main().

 11
Author: Magarusu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-04 17:54:39

(/SUBSISTEMA: CONSOLA) no funcionó para mi vs2013 (ya lo tenía).

"ejecutar sin depurar" no es una opción, ya que no quiero cambiar entre depurar 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 en otra dirección. Según recuerdo, en vs2008 no necesitábamos tales trucos.

 10
Author: fantastory,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-13 14:50:58

Aquí hay una solución que (1) no requiere ningún cambio de código o puntos de interrupción, y (2) pausa después de la terminación del programa para que pueda ver todo que se imprimió. Se detendrá después de F5 o Ctrl + F5. El mayor inconveniente es que en VS2013 Express (como se probó), no carga símbolos, por lo que la depuración está muy restringida.

  1. Cree un archivo por lotes. Llamé a la mía runthenpause.bat, con el siguiente contenido:

    %1 %2 %3 %4 %5 %6 %7 %8 %9
    pause
    

    La primera línea se ejecutará cualquier orden que usted proporcione y hasta ocho argumentos. La segunda línea... pausa.

  2. Abra las propiedades del proyecto / Propiedades de configuración / Depuración.

  3. Cambie "Argumentos de comando" a $(TargetPath) (o lo que esté en "Comando").
  4. Cambie "Comando" a la ruta completa a runthenpause.bat.
  5. Hit OK.

Ahora, cuando se ejecuta, runthenpause.bat iniciará su aplicación, y después de que su aplicación se haya terminado, se detendrá para que pueda ver la consola salida.

Publicaré una actualización si averiguo cómo cargar los símbolos. Intenté /Z7 por esto pero sin éxito.

 7
Author: cxw,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:34:50

Puede ejecutar su ejecutable desde un símbolo del sistema. De esta manera se podía 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ía hasta que introduzcas datos para la variable a.

 2
Author: Geo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-21 17:30:38

Agregue "| pause" en el cuadro argumentos del comando en la sección depuración en propiedades del proyecto.

 2
Author: theambient,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-28 20:13:26

Simplemente presione CNTRL + F5 para abrirlo en una ventana de línea de comandos externa (Visual Studio no tiene control sobre él).

Si esto no funciona, agrega lo siguiente al final de tu código:

Console.WriteLine("Press any key to exit...");
Console.ReadKey();

Esto espera a 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() siempre que un programa alcance un posible final.

 2
Author: carefulnow1,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-14 10:20:16

Pon como última línea de código:

system("pause");
 2
Author: rafraph,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-09 22:59:25

Una solución algo mejor:

atexit([] { system("PAUSE"); });

Al comienzo de su programa.

Ventajas:

  • puede usar std:: exit()
  • puede tener múltiples retornos desde main
  • puede ejecutar su programa bajo el depurador
  • IDE independent (+OS independent si usas el truco cin.sync(); cin.ignore(); en lugar de system("pause");)

Contras:

  • tiene que modificar el código
  • no se detendrá en std:: terminate ()
  • seguirá sucediendo en su programa fuera de la sesión IDE / debugger; puede evitar esto en Windows usando:

extern "C" int __stdcall IsDebuggerPresent(void);
int main(int argc, char** argv) {
    if (IsDebuggerPresent())
        atexit([] {system("PAUSE"); });
    ...
}
 1
Author: GhassanPL,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-23 20:37:34

Cualquiera de los dos usos:

  1. cin.get();

O

  1. system("pause");

Asegúrese de hacer cualquiera de ellos al final de la función main() y antes de la instrucción return.

 1
Author: Ahmed,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-14 23:08:19

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;
}
 -2
Author: J.M.I. MADISON,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-14 02:57:54

Use console.readline. El tuyo es escribir la línea pero no leerla.

 -3
Author: Dallas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-20 19:14:46