¿Cómo mantener abierta la ventana de la consola en Visual C ++?

Estoy empezando en Visual C ++ y me gustaría saber cómo mantener la ventana de la consola.

Por ejemplo, esta sería una aplicación típica de “hello world”:

int _tmain(int argc, _TCHAR* argv[]) { cout << "Hello World"; return 0; } 

¿Cuál es la línea que me falta?

Comience el proyecto con Ctrl + F5 en lugar de solo F5 .

La ventana de la consola ahora permanecerá abierta con la Press any key to continue . . . Press any key to continue . . . mensaje después de que el progtwig sale.

Tenga en cuenta que esto requiere la opción del vinculador Console (/SUBSYSTEM:CONSOLE) , que puede habilitar de la siguiente manera:

  1. Abra su proyecto y vaya al Explorador de soluciones. Si me sigues en K & R, tu “Solución” será “hola” con 1 proyecto debajo, y “hola” en negrita.
  2. Haga clic con el botón derecho sobre el ‘hola’ (o el nombre de su proyecto).
  3. Elija “Propiedades” en el menú contextual.
  4. Elija Propiedades de configuración> Enlazador> Sistema.
  5. Para la propiedad “Subsistema” en el panel de la derecha, haga clic en el cuadro desplegable en la columna de la derecha.
  6. Elija “Consola (/ SUBSISTEMA: CONSOLA)”
  7. Haga clic en Aplicar, espere a que termine de hacer lo que haga, luego haga clic en Aceptar. (Si “Aplicar” aparece atenuado, elija alguna otra opción del subsistema, haga clic en Aplicar, luego vuelva y aplique la opción de consola. Mi experiencia es que, por sí solo, no funcionará).

CTRL-F5 y las sugerencias del subsistema trabajan juntas; no son opciones separadas

(Cortesía de DJMorreTX de http://social.msdn.microsoft.com/Forums/en-US/vcprerelease/thread/21073093-516c-49d2-81c7-d960f6dc2ac6 )

La forma estándar es cin.get() antes de su statement de devolución.

 int _tmain(int argc, _TCHAR* argv[]) { cout << "Hello World"; cin.get(); return 0; } 

Pon un punto de interrupción en la línea de return .

Lo está ejecutando en el depurador, ¿verdad?

Otra opción es usar

 #include  system("pause"); 

Aunque esto no es muy portátil porque solo funcionará en Windows, pero se imprimirá automáticamente

Pulse cualquier tecla para continuar…

Para los proyectos de archivos MAKE, la solución aceptada falla, debido a un error en Visual Studio (que está presente al menos hasta la versión 2012; aún no lo he probado en 2013). Este error se detalla aquí .

Para que la consola se detenga después de la finalización del progtwig en un proyecto de archivo MAKE, realice estos pasos (esto puede diferir para las versiones que no sean 2010 – 2012):

1) Pase /SUBSYSTEM:CONSOLE al enlazador.EDITAR : mira abajo.

2) Abra su archivo de proyecto (.vcxproj) en un editor de texto.

3) Dentro de la etiqueta raíz , inserte lo siguiente:

   Console   

4) Recargue el proyecto en su solución.

5) Ejecute el progtwig sin depuración (CTRL + F5).

EDITAR:

Según mi comentario a continuación, establecer la opción del vinculador /SUBSYSTEM:CONSOLE es en realidad irrelevante para los proyectos de archivos MAKE (y no necesariamente incluso posible, si está utilizando un comstackdor que no sea MSVC). Lo único que importa es que la configuración se agregue al archivo .vcxproj, como se indica en el paso 3 anterior.

Puedes usar cin.get(); o cin.ignore(); justo antes de su statement de devolución para evitar que se cierre la ventana de la consola.

Simplemente agregue un punto de _tmain corchete de cierre de su método _tmain . Esta es la manera más fácil además de que no tiene que agregar código para depurar.

acaba de poner un punto de interrupción en el último corchete de main.

  int main () { //...your code... return 0; } //<- breakpoint here 

funciona para mí, no es necesario ejecutar sin depuración. También ejecuta destructores antes de llegar al punto de interrupción para que pueda verificar cualquier impresión de mensajes en estos destructores si tiene alguno.

Coloque un punto de interrupción en el corsé final de main() . Se disparará incluso con múltiples declaraciones de return . El único inconveniente es que una llamada para exit() no será capturada.

Si no está depurando, siga los consejos en la respuesta de Zoidberg y comience su progtwig con Ctrl + F5 en lugar de solo F5 .

cin.get (), o sistema (“PAUSE”). No he escuchado que puedas usar return (0);

#include y luego, #include getch(); justo antes de la return 0; línea. Eso es lo que aprendí en la escuela de todos modos. Los métodos mencionados anteriormente aquí son bastante diferentes, veo.

Tenía el mismo problema. Estoy usando _getch () justo antes de la statement de devolución. Funciona.

Yo tuve el mismo problema; En mi aplicación hay múltiples puntos de salida () y no había forma de saber exactamente dónde sale, luego me enteré de esto:

 atexit(system("pause")); 

o

 atexit(cin.get()); 

De esta manera se detendrá sin importar dónde salgamos en el progtwig.

Mis 2 centavos:

Opción 1: Agregar un punto de interrupción al final de main()

Opción 2: agregue este código, justo antes de la return 0; :

 std::cout << "Press ENTER to continue..."; //So the User knows what to do std::cin.ignore(std::numeric_limits::max(), '\n'); 

Necesita incluir para std::numeric_limits

(Algunas opciones se pueden llamar por diferentes nombres. No uso la versión en inglés)

Tuve el mismo problema, cuando creé proyectos con la opción “proyecto vacío”, creaba proyecto como “aplicación Win32-console” en lugar de “proyecto vacío”. En el cuadro de diálogo que aparece ahora, presiona “continuar” y luego puedes marcar la opción “proyecto vacío” y presionar confirmar. Después de eso, CTRL + F5 abrirá una consola que no se cierra automáticamente.

puedes simplemente poner keep_window_open (); antes de la vuelta aquí hay un ejemplo

 int main() { cout<<"hello world!\n"; keep_window_open (); return 0; } 

Otra opción:

 #ifdef _WIN32 #define MAINRET system("pause");return 0 #else #define MAINRET return 0 #endif 

En principal:

 int main(int argc, char* argv[]) { MAINRET; } 

simplemente agregue el sistema (“pausa”) al final del código antes de devolver 0 como este

 int main() { some code goes here system("pause") return 0; } 

En realidad, la solución real es la selección de la plantilla del proyecto en sí. DEBE seleccionar la Aplicación de consola Win32 en un VS anterior, o complete primero el nombre del proyecto y luego haga doble clic en el Asistente para escritorio de Windows y luego seleccione la aplicación de consola Win32. Luego seleccione el proyecto vacío en este punto. Esto permite entonces lo que el interlocutor original realmente quería sin agregar un punto de detención adicional y mantener el código. Pasé por este problema también. La respuesta también está en el sitio de MSDN.

Esta es una forma de mantener abierta la ventana de comandos independientemente de cómo se detenga la ejecución sin modificar ningún código:

En Visual Studio, abra Páginas de propiedades del proyecto -> Depuración .

Para Comando , ingrese $(ComSpec)

Para Argumentos de Comando , ingrese /k $(TargetPath) . Agregue cualquier argumento a su propia aplicación.

Ahora F5 o Ctrl-F5 ejecuta Windows / System32 / cmd.exe en una nueva ventana, y / k asegura que el símbolo del sistema permanezca abierto después de que se complete la ejecución.

La desventaja es que la ejecución no se detendrá en los puntos de interrupción.