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?
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.
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
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.
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
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>
.
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()
.
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.
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.
-
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.
Abra las propiedades del proyecto / Propiedades de configuración / Depuración.
- Cambie "Argumentos de comando" a
$(TargetPath)
(o lo que esté en "Comando"). - Cambie "Comando" a la ruta completa a
runthenpause.bat
. - 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.
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
.
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.
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.
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");
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 desystem("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"); });
...
}
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:
cin.get();
O
system("pause");
Asegúrese de hacer cualquiera de ellos al final de la función main()
y antes de la instrucción return
.
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;
}
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.
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