Pregunta

Últimamente, he estado tratando de aprender C ++ de este sitio web. Desafortunadamente, cada vez que intento ejecutar una de las muestras de código, veo que ese programa está abierto durante aproximadamente medio segundo y luego cierro inmediatamente. ¿Hay alguna manera de evitar que el programa se cierre de inmediato para que pueda ver los frutos de mi esfuerzo?

¿Fue útil?

Solución

Editar: Como Charles Bailey señala con razón en un comentario a continuación, esto no funcionará si hay personajes amortiguados en stdin, y realmente no hay una buena manera de trabajar en torno a eso. Si estás corriendo con un depurador adjunto, La solución sugerida de 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 resulte útil. Lo he usado mucho como un truco rápido al escribir pruebas durante el desarrollo.


Al final de tu main función, puede llamar std::getchar();

Esto obtendrá un solo personaje de stdin, así que le brinda 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> por getchar.

Otros consejos

Si está utilizando Visual Studio y está comenzando la aplicación de la consola fuera del IDE:

prensado CTRL-F5 (Comience sin depuración) iniciará la aplicación y mantendrá la ventana de la consola abierta hasta que presione cualquier tecla.

La solución de James trabaja para todas las plataformas.

Alternativamente en Windows También puede agregar lo siguiente justo antes de regresar de main función:

  system("pause");

Esto ejecutará el pause comando que espera hasta que presione una tecla y también muestra un buen mensaje Press any key to continue . . .

Si está utilizando el Visual C ++ 2010 Express de Microsoft y se encuentra con el problema con CTRL+F5 No trabajar para mantener abierta la consola después de que el programa haya terminado, eche un vistazo a Este hilo MSDN.

Es probable que su IDE esté configurado para cerrar la consola después de una ejecución CTRL+F5; De hecho, un "proyecto vacío" en Visual C ++ 2010 cierra la consola por defecto. Para cambiar esto, haga lo que sugirió el moderador de Microsoft:

Haga clic derecho en el nombre de su proyecto y vaya a la página Propiedades, expanda las propiedades de configuración -> Linker -> Sistema, seleccione Consola (/Subsistema: Consola) en el desplegable del subsistema. Porque, por defecto, el proyecto vacío no lo especifica.

Por lo general, solo pongo un punto de interrupción main()El cierre de la aparato ortopédico rizado. Cuando el final del programa se alcance por cualquier medio, el punto de interrupción alcanzará el tit de alt a la ventana de la consola para ver la salida.

¿Por qué no solo ejecutar el programa desde una consola, es decir, ejecute el programa desde cmd.exe si está usando Windows? De esa manera, la ventana permanece abierta después de que termina el programa.

Editar]: cuando uso kdevelop4 hay una instancia completamente incipiente de bash (una cli de Linux) que se ejecuta en una pestaña en la parte inferior del IDE. Que es lo que uso en este tipo de circunstancias.

Antes del final de su código, inserte esta línea:

system("pause");

Esto mantendrá la consola hasta que presione una llave.

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string s;
    cout << "Please enter your first name followed by a newline\n";
    cin >> s;
    cout << "Hello, " << s << '\n';
    system("pause"); // <----------------------------------
    return 0; // This return statement isn't necessary
}

Llamar cin.get(); 2 veces:

    //...
    cin.get();
    cin.get();
    return 0
}

Si ejecuta su código desde un IDE competente, como Código :: bloques, 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 la consola abierta, porque esto evitará que funcione correctamente cuando lo use de verdad, fuera del IDE.

Está 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, probablemente lo estarías ejecutando desde la consola.

De todos modos, puede agregar basura al final de su programa como otros están sugiriendo, o simplemente puede golpear CTRL + F5 (Comience sin depuración) y Visual Studio dejará la consola una vez completa.

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 Visual Studio Attect al proceso o algo si realmente lo desea.

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 un conjunto de puntos de interrupción), presione CTRL+F5 o elija Comience sin depurar en los menús (generalmente está en el menú de depuración, lo que estoy de acuerdo es confuso). Será un poco más rápido, Y lo que es 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 ejecuta su nombre. De esa manera, cuando ha terminado de ejecutar el símbolo del sistema, no se cierre y puede ver la salida. Prefiero ambos métodos para agregar código que detenga la aplicación tal como está terminado.

Simplemente agregue lo siguiente al final de su programa. Intentará capturar alguna forma de entrada del usuario, por lo que evita que la consola se cierre automáticamente.

cin.get();

Agregue las siguientes líneas antes de cualquiera exit() función o antes de cualquiera returnpecado main():

std::cout << "Paused, press ENTER to continue." << std::endl;
cin.ignore(100000, "\n");

Para Visual Studio (y solo Visual Studio), el siguiente fragmento de código le brinda un indicador de 'esperar a que KeyPress continúe' que realmente espera a que el usuario presione un nuevo clave explícitamente, al enjuagar primero el búfer de entrada:

#include <cstdio>
#include <tchar.h>
#include <conio.h>

_tprintf(_T("Press a key to continue "));
while( _kbhit() /* defined in conio.h */ ) _gettch();
_gettch();

Tenga en cuenta que esto usa el tchar.h Macro es compatible con múltiples 'conjuntos de caracteres' (como los llama VC ++).

Solo hago esto:

//clear buffer, wait for input to close program
std::cin.clear(); std::cin.ignore(INT_MAX, '\n');
std::cin.get();
return 0;

Nota: Borrar el búfer CIN y tal solo es necesario si ha usado CIN en algún momento antes de su programa. También usar std :: numeric_limits :: max () probablemente sea mejor que int_max, pero es un poco prolijo y generalmente innecesario.

Usar #include "stdafx.h" & system("pause"); Al igual que el código a continuación.

#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
    std::cout << "hello programmer!\n\nEnter 2 numbers: ";
    int x, y;
    std::cin >> x >> y;
    int w = x*y;
    std::cout <<"\nyour answer is: "<< w << endl;
    system("pause");
}
#include "stdafx.h"
#include <iostream>
#include <conio.h>

using namespace std;

int main()
{

    cout << "Press any key to continue...";
    getch();

    return 0;
}

No noté que nadie más publicara esto, así que aquí está.

Idea similar a yeh Respuesta, solo alternativa minimalista.

Cree un archivo por lotes con el siguiente contenido:

helloworld.exe
pause

Luego use el archivo por lotes.

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 termine el programa. Si no, usa std::cin.get(); leer un personaje al final de la función principal. Sin embargo, asegúrese de usar solo entrada basada en línea (std :: getline) o para tratar con caracteres no leídos sobrantes de lo contrario (std :: ignorar hasta newline) porque de lo contrario el .get () al final solo leerá la basura que dejó no leído anteriormente.

Esto parece funcionar bien:

cin.clear();
cin.ignore(2);

Si elimina 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.

Siempre puede crear un archivo por lotes. Por ejemplo, si su programa se llama helloworld.exe, algún código sería:

@echo off
:1
cls
call helloworld.exe
pause >nul
goto :1

Si está ejecutando Windows, puede hacer system("pause >nul"); o system("pause");. Ejecuta un comando de consola para pausar el programa hasta que presione una tecla. >nul evita que diga Press any key to continue....

Estoy poniendo un punto de interrupción en el último regreso 0 del programa. Funciona bien.

simplemente

int main(){
    // code...
    getchar();
    getchar();
    return 0;
}

solía cin.get() Y eso se funciona, pero un día necesitaba usar otro cin.get([Array Variable]) Antes de eso para tomar una cuerda Ling con carácter en blanco en el medio de. entonces el cin.get() No evitó que el avance del símbolo del sistema se cierre. Finalmente encontré otra forma: Presione CTRL+F5 Abrir en una ventana externa y Visual Studio ya no tiene control sobre ella. Solo le preguntaré sobre el cierre después de que se ejecuten los comandos finales.

Intenté poner un getchar() función al final. Pero no funcionó. Entonces, lo que hice fue agregar dos getchar() Funciona uno tras otro. Creo que el primero getchar() absorbe el Ingresar clave que presiona después de la última entrada de datos. Así que intenta agregar dos getchar() funciones en lugar de una

En lugar de presionar el botón Ejecutar, presione CTRL y F5 al mismo tiempo, le dará el mensaje Presione cualquier tecla para continuar. O escriba "(Advertencia use esto solo para probar los programas no reales, ya que a los antivirus no le gusta!)" Al final de su función principal, pero: (Advertencia use esto solo para probar los programas no reales como antivirus Don '¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡.le !!!!)

Simplemente use cin.ignore () justo antes de devolver 0; dos veces

main()
  {
  //your codes 

  cin.ignore();
  cin.ignore();

  return 0;
  }

eso es todo

Todo lo que tiene que hacer establece una variable para x, simplemente escriba esto antes de la devolución 0;

cout<<"\nPress any key and hit enter to end...";
cin>>x;

You can even declare an integer at the beginning of your main() function (say int a;) and put std::cin >> a; just before the return value. So the program will keep running until you press a key and enter.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top