Estoy comenzando 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 "hola mundo":
int _tmain(int argc, _TCHAR* argv[])
{
cout << "Hello World";
return 0;
}
¿Cuál es la línea que me falta?
visual-c++
console
Raúl Roa
fuente
fuente
Respuestas:
Comience el proyecto con en Ctrl+F5lugar de solo F5.
La ventana de la consola ahora permanecerá abierta con el
Press any key to continue . . .
mensaje después de que el programa salga.Tenga en cuenta que esto requiere la
Console (/SUBSYSTEM:CONSOLE)
opción del vinculador, que puede habilitar de la siguiente manera:CTRL-F5 y las sugerencias del subsistema funcionan 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 )
fuente
cin.get(),getchar(), system("pause")
o cualquier otra basura. Cambiar esto funciona.system("pause");
al final de su código. Tiene sentido y funciona bien.La forma estándar es
cin.get()
antes de su declaración de devolución.fuente
_tmain
. Votaría otro -1 para elcin.get()
lugar de colocar un punto de interrupción para F5 o usar Ctrl F5. Pero solo se me permite un voto negativo._tmain
? Esa es la forma estándar de escribir una aplicación de Windows dirigida al subsistema Consola. Desviarse de ese estándar es lo que sería una mala práctica. Claramente, nadie está hablando de código portátil aquí; la pregunta dice Visual C ++ y_tmain
es la firma que aparece en el código de muestra. Es hora de abandonar esta religión. Windows es "no estándar" de forma predeterminada, y existen muy buenas razones para seguir sus estándares._tmain
es porque es totalmente innecesario no estándar (el estándar internacional de C ++ requiere una simplemain
), y porque utiliza elT
esquema macro de Microsoft , que es una complicación innecesaria y una palabrería para admitir Windows 9x. Si siente que desviarse del estándar es una mala práctica, entonces no debe usarlotmain
. No hay buenas razones para usartmain
, excepto para curricán o, para profesionales, para mostrar la incompetencia total.Pon un punto de interrupción en la
return
línea.Lo estás ejecutando en el depurador, ¿verdad?
fuente
Otra opción es usar
Aunque esto no es muy portátil porque solo funcionará en Windows, pero imprimirá automáticamente
fuente
system
se declara en<stdlib.h>
.Para los proyectos de archivo 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 he probado 2013). Este error se detalla aquí .
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 versiones distintas de 2010 - 2012):
1) Pase- EDITAR : ver más abajo./SUBSYSTEM:CONSOLE
al enlazador.2) Abra su archivo de proyecto (.vcxproj) en un editor de texto.
3) Dentro de la
<project>
etiqueta raíz , inserte lo siguiente:4) Vuelva a cargar el proyecto en su solución.
5) Ejecute el programa sin depurar (CTRL + F5).
EDITAR:
Según mi comentario a continuación, configurar la opción del vinculador
/SUBSYSTEM:CONSOLE
es realmente irrelevante para proyectos de archivo MAKE (y no necesariamente es posible, si está utilizando un compilador que no sea MSVC). Lo único que importa es que la configuración se agrega al archivo .vcxproj, como se indica en el paso 3 anterior.fuente
/SUBSYSTEM:CONSOLE
al enlazador es realmente irrelevante: el paso 3 es lo único que importa. Tenga en cuenta que mi respuesta se relaciona con los proyectos de archivos MAKE: en un proyecto de archivos MAKE, el IDE no tiene forma de saber qué está pasando al vinculador (es posible que ni siquiera esté utilizando un compilador que tiene una/SUBSYSTEM:CONSOLE
opción), y es el proyecto en sí mismo, que realiza un seguimiento de si está destinado o no a ser un programa de consola. Editaré mi respuesta en consecuencia.Puede usar
cin.get();
ocin.ignore();
justo antes de su declaración de devolución para evitar que la ventana de la consola se cierre.fuente
solo ponga un punto de interrupción en el último soporte rizado de main.
funciona para mí, no es necesario ejecutarlo sin depurarlo. También ejecuta destructores antes de llegar al punto de interrupción para que pueda verificar cualquier mensaje impreso en estos destructores si tiene alguno.
fuente
Simplemente agregue un punto de interrupción al corchete de cierre de su
_tmain
método. Esta es la forma más fácil, además de que no tiene que agregar código para depurar.fuente
Coloque un punto de interrupción en la llave final de
main()
. Se disparará incluso con múltiplesreturn
declaraciones. El único inconveniente es que una llamada aexit()
no será capturada.Si no está depurando, siga los consejos de la respuesta de Zoidberg y comience su programa con Ctrl+ en F5lugar de solo F5.
fuente
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
return 0;
:Necesitas incluir
<iomanip>
parastd::numeric_limits
fuente
simplemente agregue el sistema ("pausa") al final del código antes de devolver 0 como este
fuente
fuente
cin.get()
Osystem("PAUSE")
. No he escuchado que puedas usarreturn(0);
fuente
Incluyo
#include <conio.h>
y luego, agregogetch();
justo antes de lareturn 0;
línea. Eso es lo que aprendí en la escuela de todos modos. Los métodos mencionados anteriormente aquí son bastante diferentes, veo.fuente
Tuve el mismo problema Estoy usando
_getch()
justo antes de la declaración de devolución. Funciona.fuente
(Algunas opciones se pueden llamar con diferentes nombres. No uso la versión en inglés)
Tuve el mismo problema, cuando creé proyectos con la opción "proyecto vacío", Crear proyecto como "Aplicación de consola Win32" en lugar de "proyecto vacío". En el cuadro de diálogo que aparece ahora, presiona "continuar" y luego puede 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.
fuente
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, entonces descubrí esto:
o
De esta manera, se detendrá sin importar dónde salgamos del programa.
fuente
atexit
.atexit
toma un puntero de función, no un entero.Otra opción:
En principal:
fuente
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 VS anteriores, o complete primero el nombre del proyecto y luego haga doble clic en el asistente de escritorio de Windows y luego seleccione la aplicación de consola Win32. Luego seleccione proyecto vacío en este punto. Esto permite lo que realmente quería el interrogador original sin agregar un punto de detención adicional y un código de retención. Pasé por este problema también. La respuesta también está en el sitio de MSDN.
fuente
Aquí hay una manera 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 las 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.
fuente
Como algunos ya han señalado, la solución de Zoidbergs no adjunta el depurador, que es algo que generalmente no desea.
La mejor opción es configurar su VS en consecuencia (a partir de VS 2017 en adelante), vaya a Herramientas> Opciones> Depuración> General. Allí desmarca "Cerrar automáticamente la consola cuando se detiene la depuración" (en la parte inferior), que probablemente esté marcada en su caso.
fuente
solo puedes poner keep_window_open (); antes del regreso aquí hay un ejemplo
fuente