web-dev-qa-db-fra.com

Empêcher la fermeture de la fenêtre de la console sur l'application console Visual Studio C/C++

C'est probablement une question embarrassante, car la réponse est aveuglante.

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

Lorsque j'exécute mon application, la fenêtre de la console s'ouvre, la sortie du programme apparaît, puis la fenêtre se ferme à la fermeture de l'application.

Y a-t-il un moyen de le garder ouvert jusqu'à ce que je vérifie la sortie ou d'afficher les résultats après la fermeture de la fenêtre?

409
Martin

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

421
Tom

Clic droit sur votre projet 

Propriétés> Propriétés de configuration> Éditeur de liens> Système

Sélectionnez Console (/ SOUS-SYSTEME: CONSOLE) dans l'option SubSystem ou vous pouvez simplement taper Console dans le champ de texte!

Maintenant, essayez ... ça devrait marcher

187
Viraj

Voici un moyen pour C/C++:

#include <stdlib.h>

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

Mettez ceci en haut de votre programme, et SI c'est sur un système Windows (#ifdef _WIN32), alors il va créer une macro appelée WINPAUSE. Chaque fois que vous souhaitez que votre programme suspende, appelez WINPAUSE; et le programme sera interrompu à l’aide de la commande DOS. Pour les systèmes tels que Unix/Linux, la console ne doit de toute façon pas quitter le programme.

43
Shaun

Aller au menu de débogage -> Appuyez sur StartWithoutDebugging

25
pashaplus

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

Il attendra <ENTER>.

20
Cheeso

essayez d'appeler getchar() juste avant le retour de main().

11
Magarusu

(/ SOUS-SYSTEME: CONSOLE) n'a pas fonctionné pour mon vs2013 (je l'avais déjà).

"Exécuter sans débogage" n'est pas une option, car je ne souhaite pas basculer entre le débogage et l'affichage en sortie.

J'ai fini 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 dans un autre sens. Si je me souviens bien, dans vs2008, nous n'avions pas besoin de telles astuces.

10
fantastory

Voici une solution qui (1) ne nécessite aucune modification de code ni point d'arrêt, et (2) met en pause après la fin du programme afin que vous puissiez voir tout imprimé. Il fera une pause après F5 ou Ctrl + F5. L'inconvénient majeur est que sur VS2013 Express (testé), il ne charge pas les symboles, donc le débogage est très limité.

  1. Créez un fichier batch. 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 lancera la commande que vous fournissez et jusqu'à huit arguments. La deuxième ligne sera ... pause.

  2. Ouvrez les propriétés du projet | Propriétés de configuration | Débogage.

  3. Remplacez "Arguments de commande" par $(TargetPath) (ou tout ce qui se trouve dans "Commande").
  4. Remplacez "Commande" par le chemin complet en runthenpause.bat.
  5. Hit OK.

Désormais, lorsque vous exécuterez, runthenpause.bat lancera votre application et, une fois celle-ci terminée, s'interrompra pour que vous puissiez voir la sortie de la console.

Je publierai une mise à jour si je découvre comment obtenir les symboles chargés. J'ai essayé /Z7 par ceci mais sans succès.

7
cxw

il suffit de mettre comme dernière ligne de code:

system("pause");
5
RefaelJan

Appuyez simplement sur CNTRL + F5 pour l’ouvrir dans une fenêtre de ligne de commande externe (Visual Studio n’a pas le contrôle dessus).

Si cela ne fonctionne pas, ajoutez ce qui suit à la fin de votre code:

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

Vous devez alors appuyer sur une touche pour fermer la fenêtre du terminal une fois que le code est arrivé à sa fin.

Si vous souhaitez effectuer cela à plusieurs endroits, placez 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
carefulnow1

ajouter “| pause ”dans la boîte des arguments de commande sous la section de débogage dans les propriétés du projet.

2
theambient

Vous pouvez exécuter votre fichier exécutable à partir d'une invite de commande. De cette façon, vous pouvez voir tout le résultat. Ou, vous pouvez faire quelque chose comme ça:

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

return YOUR_MAIN_CODE;

de cette façon, la fenêtre ne se fermera pas tant que vous n’aurez pas saisi les données de la variable a.

2
Geo

Une solution un peu meilleure:

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

au début de votre programme.

Avantages:

  • peut utiliser std :: exit ()
  • peut avoir plusieurs retours de main
  • vous pouvez exécuter votre programme sous le débogueur
  • IDE indépendant (+ indépendant du système d'exploitation si vous utilisez l'astuce cin.sync(); cin.ignore(); au lieu de system("pause");)

Les inconvénients:

  • avoir à modifier le code
  • ne fera pas de pause sur std :: terminate ()
  • aura toujours lieu dans votre programme en dehors de la session IDE/débogueur; 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
GhassanPL

À partir de Visual Studio 2017 (15.9.4), il existe une option:

Tools->Options->Debugging->Automatically close the console

Le fragment correspondant de la documentation de Visual Studio :

Ferme automatiquement la console lorsque le débogage s'arrête:

Indique à Visual Studio de fermer la console à la fin d'une session de débogage.

1
chronoxor

Vous pouvez également utiliser cette option

#include <conio.h> 
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main() {
   .
   .
   .
   getch(); 

   return 0;
}
0
Vladimir Salguero

Dans mon cas, j'ai vécu cela lorsque j'ai créé un projet Empty C++ sur VS 2017 community edition. Vous devrez définir le sous-système sur "Console (/ SUBSYSTEM: CONSOLE)" sous Propriétés de configuration. 

  1. Allez dans "Affichage" puis sélectionnez "Gestionnaire de propriétés"
  2. Faites un clic droit sur le projet/solution et sélectionnez "Propriété". Cela ouvre une page de propriétés de test
  3. Accédez à l'éditeur de liens puis sélectionnez "Système"
  4. Cliquez sur "Sous-système" et un menu déroulant apparaît
  5. Choisissez "Console (/ SOUS-SYSTEME: CONSOLE)"
  6. Appliquer et sauvegarder
  7. La prochaine fois que vous exécuterez votre code avec "CTRL + F5", vous devriez voir la sortie.
0
Stephen Haruna