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?
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.
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
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.
Aller au menu de débogage -> Appuyez sur StartWithoutDebugging
Si vous utilisez .NET, mettez Console.ReadLine()
avant la fin du programme.
Il attendra <ENTER>
.
essayez d'appeler getchar()
juste avant le retour de main()
.
(/ 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.
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é.
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.
Ouvrez les propriétés du projet | Propriétés de configuration | Débogage.
$(TargetPath)
(ou tout ce qui se trouve dans "Commande").runthenpause.bat
.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.
il suffit de mettre comme dernière ligne de code:
system("pause");
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.
ajouter “| pause ”dans la boîte des arguments de commande sous la section de débogage dans les propriétés du projet.
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
.
Une solution un peu meilleure:
atexit([] { system("PAUSE"); });
au début de votre programme.
Avantages:
cin.sync(); cin.ignore();
au lieu de system("pause");
)Les inconvénients:
extern "C" int __stdcall IsDebuggerPresent(void);
int main(int argc, char** argv) {
if (IsDebuggerPresent())
atexit([] {system("PAUSE"); });
...
}
À 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.
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;
}
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.