studio - ¿Cómo mantener abierta la ventana de la consola en Visual C++?
limpiar pantalla en c# windows form (20)
(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.
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?
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 programa con Ctrl + F5 en lugar de solo F5 .
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 programa sale.
Tenga en cuenta que esto requiere la opción del vinculador Console (/SUBSYSTEM:CONSOLE)
, que puede habilitar de la siguiente manera:
- 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.
- Haga clic con el botón derecho sobre el ''hola'' (o el nombre de su proyecto).
- Elija "Propiedades" en el menú contextual.
- Elija Propiedades de configuración> Enlazador> Sistema.
- Para la propiedad "Subsistema" en el panel de la derecha, haga clic en el cuadro desplegable en la columna de la derecha.
- Elija "Consola (/ SUBSISTEMA: CONSOLA)"
- 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 )
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.
La forma estándar es cin.get()
antes de su declaración de devolución.
int _tmain(int argc, _TCHAR* argv[])
{
cout << "Hello World";
cin.get();
return 0;
}
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<std::streamsize>::max(), ''/n'');
Necesita incluir <iomanip>
para std::numeric_limits
Otra opción es usar
#include <process.h>
system("pause");
Aunque esto no es muy portátil, solo funcionará en Windows, pero se imprimirá automáticamente "Presione cualquier tecla para continuar ...". para ti.
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;
}
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 here .
Para que la consola se detenga después de la finalización del programa en un proyecto de archivo MAKE, realice estos pasos (esto puede diferir para las versiones que no sean 2010 - 2012):
1) Pase - EDITAR : mira abajo. /SUBSYSTEM:CONSOLE
al enlazador.
2) Abra su archivo de proyecto (.vcxproj) en un editor de texto.
3) Dentro de la etiqueta raíz <project>
, inserte lo siguiente:
<ItemDefinitionGroup> <Link> <SubSystem>Console</SubSystem> </Link> </ItemDefinitionGroup>
4) Recargue el proyecto en su solución.
5) Ejecute el programa 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 compilador 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.
Pon un punto de interrupción en la línea de return
.
Lo está ejecutando en el depurador, ¿verdad?
Puedes usar cin.get();
o cin.ignore();
justo antes de su declaración 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.
Tenía el mismo problema. Estoy usando _getch () justo antes de la declaración 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 programa.
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.
cin.get (), o sistema ("PAUSE"). No he escuchado que puedas usar return (0);
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;
}
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;
}
#include <conio.h>
y luego, #include <conio.h>
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.