Últimamente, he estado tratando de aprender C ++ de este sitio web . Desafortunadamente, cada vez que intento ejecutar uno de los ejemplos de código, veo que el programa se abre durante aproximadamente medio segundo y luego se cierra inmediatamente. ¿Hay alguna manera de evitar que el programa se cierre inmediatamente para que pueda ver los frutos de mi esfuerzo?
193
Respuestas:
Editar: como Charles Bailey señala correctamente en un comentario a continuación, esto no funcionará si hay caracteres almacenados
stdin
, y realmente no hay una buena manera de evitarlo. Si está ejecutando con un depurador conectado, la solución sugerida por John Dibling es probablemente la solución más limpia para su problema.Dicho esto, dejaré esto aquí y tal vez alguien más lo encuentre útil. Lo he usado mucho como una especie de truco rápido al escribir pruebas durante el desarrollo.
Al final de su
main
función, puede llamarstd::getchar();
Esto obtendrá un solo carácter
stdin
, lo que le dará el tipo de comportamiento "presione cualquier tecla para continuar" (si realmente desea un mensaje de "presione cualquier tecla", tendrá que imprimir uno usted mismo).Necesitas
#include <cstdio>
paragetchar
.fuente
getchar
no resuelve el problema, o solo en circunstancias limitadas, al menos. Lee un carácter destdin
, pero si ya hay caracteres almacenados en búfer desde stdin, el programa continuará sin esperar, independientemente de si imprime un mensaje o no.\n
es una solución parcial, pero no ayudará si se almacena más de una línea de entrada. No conozco una forma estándar de C ++ para borrar todo de una secuencia de entrada. : - /std::cin.ignore(std::cin.rdbuf()->in_avail());
? Lo tengo desde aquí .std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
con#include <limits>
.Si está utilizando Visual Studio y está iniciando la aplicación de consola desde el IDE:
Al presionar CTRL-F5 (iniciar sin depurar) se iniciará la aplicación y se mantendrá abierta la ventana de la consola hasta que presione cualquier tecla.
fuente
La solución de James funciona para todas las plataformas.
Alternativamente
Windows
, también puede agregar lo siguiente justo antes de regresar de lamain
función:Esto ejecutará el
pause
comando que espera hasta que presione una tecla y también muestra un mensaje agradablePress any key to continue . . .
fuente
Si está utilizando Visual C ++ 2010 Express de Microsoft y se encuentra con el problema de que CTRL + F5 no funciona para mantener la consola abierta después de que el programa haya finalizado, eche un vistazo a este hilo de MSDN .
Probablemente su IDE esté configurado para cerrar la consola después de ejecutar CTRL + F5; de hecho, un "Proyecto vacío" en Visual C ++ 2010 cierra la consola de forma predeterminada. Para cambiar esto, haga lo que sugirió el moderador de Microsoft:
fuente
Por lo general, solo pongo un punto de interrupción en
main()
la llave de cierre. Cuando se llega al final del programa por cualquier medio, el punto de interrupción alcanzará y puede ALT-Tab a la ventana de la consola para ver la salida.fuente
¿Por qué no simplemente ejecuta el programa desde una consola, es decir, ejecuta el programa desde cmd.exe si estás usando Windows? De esa manera, la ventana permanece abierta después de que finaliza el programa.
[EDITAR]: Cuando uso KDevelop4, hay una instancia completa de Bash (una CLI de Linux) ejecutándose en una pestaña en la parte inferior del IDE. Que es lo que uso en este tipo de circunstancias.
fuente
main
está definido, pero si no lo configuro explícitamente en la línea de comando, VS mata la ventana cuando la aplicación sale. suspiromain
en el proyecto, el vinculador por defecto utiliza el subsistema CONSOLA. Al depurar o ejecutar, obtendrá una ventana de consola. Sin embargo, a menos que especifique explícitamente CONSOLE como el subsistema en las propiedades del proyecto, Visual Studio no mantendrá abierta la ventana de la consola. Siempre comienzo desde un proyecto vacío y rara vez cambio las propiedades individuales del proyecto, por lo que nunca he visto que la ventana de la consola se quede. Perdón por la confusiónAntes del final de su código, inserte esta línea:
Esto mantendrá la consola hasta que pulses una tecla.
fuente
Llamar
cin.get();
2 veces:fuente
Si ejecuta su código desde un IDE competente, como Code :: Blocks , el IDE administrará la consola que utiliza para ejecutar el código, manteniéndolo abierto cuando se cierre la aplicación. No desea agregar un código especial para mantener abierta la consola, ya que esto evitará que funcione correctamente cuando la use de manera real, fuera del IDE.
fuente
Bien, supongo que estás en Windows usando Visual Studio ... ¿por qué? Bueno, porque si estás en algún tipo de sistema operativo Linux, entonces probablemente lo estarías ejecutando desde la consola.
De todos modos, puede agregar basura al final de su programa como lo sugieren otros, o simplemente puede presionar CTRL + F5 (comenzar sin depurar) y Visual Studio dejará la consola una vez completada.
Otra opción si desea ejecutar la versión de depuración y no agregar basura a su código es abrir la ventana de la consola (Inicio -> Ejecutar -> cmd) y navegar a su directorio de salida de depuración . Luego, solo ingrese el nombre de su ejecutable y ejecutará su programa de depuración en la consola. Luego puede usar el adjunto de Visual Studio para procesar o algo si realmente lo desea.
fuente
No noté que nadie más publicara esto, así que aquí está.
fuente
conio.h
es un encabezado específico de Windows y puede que no esté disponible en todas las máquinas (o puede que necesite vincularlo por separado, lo cual es una exageración).Si realmente está depurando su aplicación en Visual C ++, presione F5 o el triángulo verde en la barra de herramientas. Si realmente no lo está depurando (no tiene puntos de interrupción establecidos), presione Ctrl + F5 o elija Iniciar sin depurar en los menús (generalmente está en el menú Depurar, lo que estoy de acuerdo es confuso). Será un poco más rápido, y lo más importante para usted, se detendrá al final sin que tenga que cambiar su código.
Alternativamente, abra un símbolo del sistema, navegue a la carpeta donde está su exe y ejecútelo escribiendo su nombre. De esa manera, cuando termine de ejecutarse, el símbolo del sistema no se cierra y puede ver la salida. Prefiero ambos métodos a agregar código que detiene la aplicación justo cuando está terminada.
fuente
Simplemente agregue lo siguiente al final de su programa. Intentará capturar alguna forma de entrada del usuario para evitar que la consola se cierre automáticamente.
fuente
Agregue las siguientes líneas antes de cualquier
exit()
función o antes de cualquierreturn
s enmain()
:fuente
Para Visual Studio (y solo Visual Studio), el siguiente fragmento de código le da un mensaje de 'espera para que la pulsación de tecla continúe' que realmente espera que el usuario presione una nueva tecla explícitamente, primero enjuagando el búfer de entrada:
Tenga en cuenta que esto usa las
tchar.h
macros para ser compatibles con múltiples 'juegos de caracteres' (como los llama VC ++).fuente
Solo hago esto:
Nota: borrar el búfer cin y tal solo es necesario si ha usado cin en algún momento anteriormente en su programa. También usar std :: numeric_limits :: max () es probablemente mejor que INT_MAX, pero es un poco prolijo y generalmente innecesario.
fuente
Use
#include "stdafx.h"
ysystem("pause");
al igual que el código de abajo.fuente
system
se declara en<cstdlib>
, nostdafx.h
.Idea similar a la respuesta de yeh , solo una alternativa minimalista.
Cree un archivo por lotes con el siguiente contenido:
Luego use el archivo por lotes.
fuente
simplemente
por alguna razón, generalmente hay 1 carácter posible para leer con getchar ya en stdin cuando ejecuta un programa. entonces el primer getchar lee este carácter, y el segundo getchar espera la entrada del usuario (su) antes de salir del programa. Y después de que un programa sale de la mayoría de las terminales, especialmente en Windows, cierre la terminal de inmediato. Entonces, nuestro objetivo es una manera simple de evitar que un programa termine después de que lo emite todo. Por supuesto, hay formas más complejas y limpias de resolver esto, pero esta es la más simple.
fuente
Vea si su IDE tiene una casilla de verificación en la configuración del proyecto para mantener la ventana abierta después de que finalice el programa. Si no, use
std::cin.get();
para leer un carácter al final de la función principal. Sin embargo, asegúrese de usar solo la entrada basada en líneas (std :: getline) o de tratar los caracteres no leídos restantes de otra manera (std :: ignore hasta nueva línea) porque de lo contrario el .get () al final solo leerá la basura que dejó sin leer antes.fuente
Esto parece funcionar bien:
Si borra el búfer primero, no será un problema cuando lea el siguiente. Por alguna razón
cin.ignore(1)
no funciona, tiene que ser 2.fuente
cin.rdbuf()->in_avail
,. No es un número mágico como 1 o 2.Siempre puedes crear un archivo por lotes. Por ejemplo, si su programa se llama helloworld.exe, algunos códigos serían:
fuente
Si está ejecutando Windows, puede hacer
system("pause >nul");
osystem("pause");
. Ejecuta un comando de consola para pausar el programa hasta que presione una tecla.>nul
evita que se dicePress any key to continue...
.fuente
Estoy poniendo un punto de interrupción en el último retorno 0 del programa. Funciona bien.
fuente
Lo usé
cin.get()
y eso funcionó, pero un día tuve que usar otrocin.get([Array Variable])
antes para agarrar una cadena de ling con un carácter en blanco en el medio. por locin.get()
que no se evitó el cierre de la ventana del símbolo del sistema. Finalmente encontré otra forma: presione CTRL + F5 para abrir en una ventana externa y Visual Studio ya no tiene control sobre él. Solo le preguntaré sobre el cierre después de ejecutar los comandos finales.fuente
Intenté poner una
getchar()
función al final. Pero no funcionó. Entonces, lo que hice fue agregar dosgetchar()
funciones una tras otra. Creo que el primerogetchar()
absorbe la Entertecla que presiona después de la última entrada de datos. Intente agregar dosgetchar()
funciones en lugar de unafuente
En lugar de presionar el botón Ejecutar, presione CTRL y F5 al mismo tiempo, le dará presionar cualquier tecla para continuar el mensaje. O escriba "(advertencia use esto solo para probar programas no reales ya que a los antivirus no les gusta !!!!)" al final de su función principal pero: (advertencia use esto solo para probar programas no reales ya que los antivirus no no me gusta !!!!)
fuente
simplemente use cin.ignore () justo antes de devolver 0; dos veces
eso es todo
fuente
Todo lo que tiene que hacer es establecer una variable para x y luego escribir esto antes del retorno 0;
fuente
Incluso puede declarar un número entero al comienzo de su
main()
función (digamosint a;
) y colocarlostd::cin >> a;
justo antes del valor de retorno. Entonces el programa seguirá ejecutándose hasta que presione una tecla e ingrese.fuente