Empêcher la fenêtre de la console de se fermer sur Visual Studio C / C++ application de la Console

il s'agit probablement d'une question embarrassante car la réponse est sans doute aveuglément évidente.

J'utilise Visual Studio depuis des années, mais c'est la première fois que je développe une "application Console".

quand j'exécute mon application, la fenêtre de la console apparaît, la sortie du programme apparaît et la fenêtre se ferme lorsque l'application sort.

Est-il un moyen de le garder jusqu'à ce que j'ai vérifié le sortie, ou afficher les résultats après la fermeture de la fenêtre?

374
demandé sur sorin 2009-11-21 18:58:35

16 réponses

si vous exécutez sans débogage (Ctrl+F5), alors par défaut il vous invite à appuyer sur return pour fermer la fenêtre. Si vous souhaitez utiliser le débogueur, vous devez mettre un point d'arrêt sur la dernière ligne.

392
répondu Tom 2009-11-21 16:00:45

clic droit sur votre projet

Propriétés>Propriétés De Configuration> Linker> Système

sélectionner Console (/sous-système:CONSOLE) dans l'option SubSystem .

essayez maintenant...ça devrait marcher

163
répondu Viraj 2013-03-24 06:14:30

voici un moyen pour C/C++:

#include <stdlib.h>

#ifdef _WIN32
    #define WINPAUSE system("pause")
#endif

mettez ceci en haut de votre programme, et S'il est sur un système Windows ( #ifdef _WIN32 ), alors il va créer une macro appelée WINPAUSE . Chaque fois que vous voulez que votre programme s'arrête, appelez WINPAUSE; et il mettra le programme en pause, en utilisant la commande DOS. Pour D'autres systèmes comme Unix/Linux, la console ne doit pas quitter à la sortie du programme de toute façon.

43
répondu Shaun 2016-10-22 15:05:40

Goto Menu Déboguer-> Appuyez Sur StartWithoutDebugging

24
répondu pashaplus 2012-09-28 09:24:32

si vous utilisez .NET, mettez Console.ReadLine() avant la fin du programme.

il attendra <ENTER> .

18
répondu Cheeso 2009-11-21 16:11:53

essayez d'appeler getchar() juste avant main() retourne.

11
répondu Magarusu 2013-04-04 17:54:39

(/sous-système:CONSOLE) n'a pas fonctionné pour ma vs2013 (Je l'avais déjà).

"exécuter sans débogage" n'est pas une option, car je ne veux pas basculer entre le débogage et de voir la sortie.

j'ai terminé avec

int main() {
  ...
#if _DEBUG
  LOG_INFO("end, press key to close");
  getchar();
#endif // _DEBUG
  return 0;
}

Solution utilisée dans qtcreator pre 2.6. Maintenant, alors que qt est en croissance, vs va autrement. Comme je m'en souviens, en vs2008 nous n'avions pas besoin de tels trucs.

10
répondu fantastory 2015-10-13 14:50:58

Voici une solution qui (1) ne nécessite aucun changement de code ou de points de rupture, et (2) fait une pause après la fin du programme de sorte que vous pouvez voir tout qui a été imprimé. Il s'arrêtera après F5 ou Ctrl+F5. Le principal inconvénient est que sur VS2013 Express (tel que testé), il ne charge pas les symboles, donc le débogage est très limité.

  1. créer un fichier de lots. J'ai appelé le mien runthenpause.bat , avec le contenu suivant:

    %1 %2 %3 %4 %5 %6 %7 %8 %9
    pause
    

    la première ligne exécutera n'importe quelle commande que vous fournissez et jusqu'à huit arguments. La deuxième ligne... pause.

  2. ouvrir les propriétés du projet | Propriétés de Configuration | débogage.

  3. changer" Arguments de commande " en $(TargetPath) (ou ce qui est dans"Commande").
  4. changer "commande" vers le chemin complet vers runthenpause.bat .
  5. Hit OK.

Maintenant, lorsque vous lancez, runthenpause.bat lancera votre application, et après que votre application est terminée, fera une pause pour que vous voyiez la sortie de la console.

je posterai une mise à jour si je trouve comment charger les symboles. J'ai essayé le /Z7 par ce mais sans succès.

7
répondu cxw 2017-05-23 12:34:50

vous pouvez exécuter votre exécutable à partir d'une invite de commande. De cette façon, vous pouvez voir toute la sortie. Ou, vous pourriez faire quelque chose comme ceci:

int a = 0;
scanf("%d",&a);

return YOUR_MAIN_CODE;

et de cette façon la fenêtre ne se fermerait pas jusqu'à ce que vous saisissiez des données pour la variable a .

2
répondu Geo 2009-11-21 17:30:38

ajouter "/ pause " dans la boîte de commandes arguments sous la section Débogage aux propriétés du projet.

2
répondu theambient 2009-11-28 20:13:26

il suffit d'appuyer sur CNTRL + F5 pour l'ouvrir dans une fenêtre de ligne de commande externe (Visual Studio n'a pas le contrôle).

si cela ne fonctionne pas alors ajouter ce qui suit à la fin de votre code:

Console.WriteLine("Press any key to exit...");
Console.ReadKey();

cette attente pour vous d'appuyer sur une touche pour fermer la fenêtre du terminal une fois que le code a atteint la fin.

si vous voulez faire cela à plusieurs endroits, mettez le code ci-dessus dans une méthode (par exemple private void Pause() ) et appelez Pause() chaque fois qu'un programme atteint une fin possible.

2
répondu carefulnow1 2016-04-14 10:20:16

comme dernière ligne de code:

system("pause");
2
répondu rafraph 2018-01-09 22:59:25

une solution un peu meilleure:

atexit([] { system("PAUSE"); });

au début de votre programme.

Pour:

  • peut utiliser std:: exit ()
  • peut avoir plusieurs déclarations de main
  • vous pouvez exécuter votre programme sous le débogueur
  • IDE independent (+OS independent si vous utilisez le truc cin.sync(); cin.ignore(); au lieu de system("pause"); )

Inconvénients:

  • modifier le code
  • "1519110920 n'est pas de la pause sur un std::terminate()
  • se produira toujours dans votre programme en dehors de la session IDE/debugger; vous pouvez empêcher cela sous Windows en utilisant:

extern "C" int __stdcall IsDebuggerPresent(void);
int main(int argc, char** argv) {
    if (IsDebuggerPresent())
        atexit([] {system("PAUSE"); });
    ...
}
1
répondu GhassanPL 2017-10-23 20:37:34

dans les deux cas:

  1. cin.get();

ou

  1. system("pause");

assurez-vous de faire l'un ou l'autre à la fin de la fonction main() et avant la déclaration return .

1
répondu Ahmed 2018-04-14 23:08:19

Visual Studio 2015 , avec imports . Parce que je déteste lorsque des exemples de code ne donnent pas les importations nécessaires.

#include <iostream>;

int main()
{
    getchar();
    return 0;
}
-2
répondu J.M.I. MADISON 2017-07-14 02:57:54

utiliser console.readline . Le tien écrit la ligne mais ne la lit pas.

-3
répondu Dallas 2011-04-20 19:14:46