2010-04-14 10 views
8

Estoy probando Visual Studio 2010 compilando un programa en C. Después de que muestra la solución en la ventana de comandos "DOS", la ventana se cierra inmediatamente. En Visual Studio 2008, uno recibe el mensaje, presione cualquier tecla para continuar y al presionar una tecla se cierra la ventana del símbolo del sistema. ¿Cómo configuro este comportamiento en 2010?Visual Studio 2010 saliendo después del programa finaliza

+1

No es diferente en VS2010, al presionar Ctrl + F5 se invoca la tecla "presionar cualquier tecla" cuando finaliza el programa. –

+1

Sí, conozco este atajo para "iniciar sin depuración" pero en mi caso la ventana de la consola se descarta inmediatamente. Esto es extraño. – yCalleecharan

Respuesta

19

Después de un poco de google, encontré this solución que no implique la modificación de su código. Contiene una solución que implica la modificación de su archivo .vcxproj.

Para hacer esto desde dentro de Microsoft Visual C++ 2010 Express (estoy suponiendo que es similar para Visual Studio 2010), abrir el proyecto y vaya a la siguiente menú:

Project->$YOURPROJECTNAME Properties... 
    ->Configuration Properties 
     ->Linker 
      ->System->SubSystem 

A continuación, utilice el menú desplegable para seleccione Console (/ SUBSYSTEM: CONSOLE) y aplique el cambio.

"Iniciar sin depurar" debería hacer lo correcto ahora.

+0

Maravilloso. Esto funciona muy bien. Y te di 1 voto arriba también. Estoy usando la edición Express. – yCalleecharan

+0

Muchas gracias por informar este error aquí. – yCalleecharan

+0

Esto funciona muy bien para mí, gracias. ¿Hay alguna manera de aplicar automáticamente esta solución a todos los proyectos? – petric

2

Esto es normal. La ventana de la consola "DOS" se adjunta a su programa y se supone que debe salir cuando termine su programa. Si desea que permanezca abierto, debe agregar código a su programa para mantenerlo abierto. Todo lo que tiene que hacer es agregar una declaración de impresión y luego ingresar una declaración al final de su programa.

+0

Ok gracias ... un código para aceptar una entrada desde el teclado. – yCalleecharan

0

Si se inicia su aplicación sin depurador ("Iniciar sin depurar"), la ventana de la consola permanecerá abierta hasta que se pulsa una tecla.

+0

hmmm ... de hecho lo hice. Sé que esto también se aplica en Visual Studio 2008 y este "comando" es lo que uso para ejecutar mis programas. Así que estaba un poco sorprendido de este comportamiento diferente en 2010. – yCalleecharan

+0

Puedo confirmar que usar "iniciar sin depuración" en 2010 no mantiene abierta la ventana de la consola después de que el programa finaliza. – yCalleecharan

+0

Ahora, eso es extraño. No tengo el mismo comportamiento en mi Visual Studio ... –

0

Puede añadir esta función y llamar a las cosas bien antes de volver de main():

void keep_window_open() 
{ 
    // clear buffer 
    fflush(stdin); 
    printf("Please enter a character to exit\n"); 
    char ch; 
    ch = getchar(); 
    return; 
} 

que lo adaptaron a partir de una versión de C++ en un fichero de cabecera utilidad en el sitio de Bjarne Stroustrup: http://www.stroustrup.com/Programming/std_lib_facilities.h

+0

Muchas gracias. Tuve que mover la línea "char ch" justo después de la llave de apertura {después de la definición de la función para evitar errores de compilación. Creo que la línea "fflush (stdin)" es código C++ y no funciona bien en C. – yCalleecharan

+0

Tiene razón, de acuerdo con las preguntas más frecuentes de c: http://c-faq.com/stdio/stdinflush. html fflush solo está definido para flujos de salida. El enlace de esa entrada de preguntas frecuentes analiza cómo vaciar la entrada: http://c-faq.com/stdio/stdinflush2.html – Darel

+0

Gracias por el enlace. – yCalleecharan

1

FWIW, el comando "Iniciar sin depuración" funciona en VS2010 exactamente de la misma forma que lo hace en versiones anteriores de Visual Studio (es decir, para un proyecto de consola, la consola permanece abierta cuando el proceso finaliza con "Presione cualquier tecla para continuar". . "prompt").

Entonces, ¿exactamente cómo está obteniendo VS2010 para ejecutar su programa? Si está utilizando el acceso directo "Ctrl-F5", ¿puede verificar que Ctrl-F5 esté vinculado al Debug.StartWithoutDebugging en "Opciones/Entorno/Teclado"?

Además, ¿puedes intentar ejecutar tu programa usando el menú ("Depurar/Iniciar sin depurar")?

+0

Gracias. Primero compilo el archivo, luego lo compilo y luego uso Debug> start sin depuración. He asignado el "Ctrl-F5" como me dijiste, pero obtengo el mismo comportamiento. Admito que es extraño, ya que Visual Studio 2005 funciona bien como se esperaba. – yCalleecharan

+0

@yCalleecharan: Interesante - No estoy al tanto de una configuración que controle esto. –

+0

Sí, es difícil de creer este extraño comportamiento. – yCalleecharan

3

La razón por la que esto sucede es porque ahora en VS 2010 es posible crear un genérico C++ proyecto vacío por defecto, sin tener que pasar por el asistente. Esto hace que VS 2010 no configure correctamente el indicador Console (/SUBSYSTEM:CONSOLE), por lo que VS2010 no tiene idea de que se trata de una aplicación de consola por la que enviaría el mensaje habitual "Presione cualquier tecla ...".

Este problema no aparece si crea un tipo de proyecto de aplicación de consola en el menú Proyecto nuevo.

Pero luego puede configurar esta bandera usted mismo y muchos otros, a través de Proyecto/Configuración, ya que la publicación anterior ha respondido correctamente!

2

Si desea que permanezca abierto, debe agregar el código a su programa.Me gusta

#include <stdio.h> 
#include <stdlib.h> 

... main(...) 
{ 
    your codes 
     . 
     . 
     . 

    system("pause"); 

} 

si agrega este código, su pantalla negra permanecerá abierta. "system (" pause ")" dentro del archivo de encabezado stdlib.h

+0

Tu respuesta sería un poco mejor si explicaras cómo se suponía que iba a funcionar. Tal como están las cosas, es un conjuro misterioso y el lector no aprende mucho. – dmckee

+0

Gracias amigo ... trabajando bien – Lokesh

1

Llevar "Iniciar sin depurar" al menú de depuración ...

Herramientas >> Personalizar >> Comandos (Tab) >> Barra de menú (lista desplegable) >> depuración (Controles Opción) >> Añadir Comando (botón) >> Depurar (Lista de categorías) >> Iniciar sin depurar

Usar "Inicio sin depurar" Permitirá que VS2010 muestre la frase "Presione cualquier tecla para continuar" antes de salir.