Je commence dans Visual C++ et j'aimerais savoir comment garder la fenêtre de la console.
Par exemple, il s’agit d’une application typique "hello world":
int _tmain(int argc, _TCHAR* argv[])
{
cout << "Hello World";
return 0;
}
Quelle est la ligne qui me manque?
Commencez le projet avec Ctrl+F5 au lieu de juste F5.
La fenêtre de la console reste maintenant ouverte avec le message Press any key to continue . . .
après la fermeture du programme.
Notez que cela nécessite l’option Console (/SUBSYSTEM:CONSOLE)
de l’éditeur de liens, que vous pouvez activer comme suit:
CTRL-F5 et les indicateurs de sous-système fonctionnent ensemble; ce ne sont pas des options séparées.
(Gracieuseté de DJMorreTX de http://social.msdn.Microsoft.com/Forums/en-US/vcprerelease/thread/21073093-516c-49d2-81c7-d960f6dc2ac6 )
La méthode standard est cin.get()
avant votre déclaration de retour.
int _tmain(int argc, _TCHAR* argv[])
{
cout << "Hello World";
cin.get();
return 0;
}
Placez un point d'arrêt sur la ligne return
.
Vous l'exécutez dans le débogueur, non?
Une autre option est d'utiliser
#include <process.h>
system("pause");
Bien que ce ne soit pas très portable, il ne fonctionnera que sous Windows, mais il sera automatiquement imprimé.
Appuyez sur n'importe quelle touche pour continuer...
Pour les projets Makefile, la solution acceptée échoue à cause d'un bogue dans Visual Studio (qui existe au moins jusqu'à la version 2012 - je n'ai pas encore testé 2013). Ce bug est détaillé ici .
Afin de mettre la console en pause après la fermeture du programme sur un projet de makefile, procédez comme suit (cela peut différer pour les versions autres que 2010 - 2012):
1) Passez - EDIT: voir ci-dessous./SUBSYSTEM:CONSOLE
à l'éditeur de liens.
2) Ouvrez votre fichier de projet (.vcxproj) dans un éditeur de texte.
3) Dans la balise racine <project>
, insérez ce qui suit:
<ItemDefinitionGroup> <Link> <SubSystem>Console</SubSystem> </Link> </ItemDefinitionGroup>
4) Rechargez le projet dans votre solution.
5) Exécutez le programme sans déboguer (CTRL + F5).
EDIT:
Comme indiqué dans mon commentaire ci-dessous, la définition de l'option de l'éditeur de liens /SUBSYSTEM:CONSOLE
n'est pas pertinente pour les projets de makefile (et même pas nécessairement possible si vous utilisez un compilateur autre que MSVC). Tout ce qui compte est que le paramètre soit ajouté au fichier .vcxproj, comme indiqué à l'étape 3 ci-dessus.
Vous pouvez utiliser cin.get();
ou cin.ignore();
juste avant votre instruction return pour éviter que la fenêtre de la console ne se ferme.
il suffit de placer un point d'arrêt sur le dernier crochet de la main.
int main () {
//...your code...
return 0;
} //<- breakpoint here
cela fonctionne pour moi, pas besoin d'exécuter sans débogage. Il exécute également les destructeurs avant d'atteindre le point d'arrêt afin que vous puissiez vérifier si des messages sont imprimés sur ces destructeurs, le cas échéant.
Ajoutez simplement un point d'arrêt au crochet de fermeture de votre méthode _tmain
. C'est le moyen le plus simple et vous n'avez pas à ajouter de code pour déboguer.
Mes 2 cents:
Choix 1: Ajouter un point d'arrêt à la fin de main()
Choix 2: Ajoutez ce code juste avant le _return 0;
_:
_std::cout << "Press ENTER to continue..."; //So the User knows what to do
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
_
Vous devez inclure _<iomanip>
_ pour std::numeric_limits
il suffit d'ajouter le système ("pause") à la fin du code avant de renvoyer 0 comme ceci
#include <stdlib.h>
int main()
{
//some code goes here
system("pause")
return 0;
}
cin.get()
ou system("PAUSE")
. Je ne vous ai pas entendu dire que vous pouvez utiliser return(0);
Placez un point d'arrêt sur l'accolade de fin de main()
. Il sera déclenché même avec plusieurs instructions return
. Le seul inconvénient est qu'un appel à exit()
ne sera pas intercepté.
Si vous n'êtes pas en train de déboguer, suivez les conseils de la réponse de Zoidberg et lancez votre programme avec Ctrl+F5 au lieu de juste F5.
J'inclus #include <conio.h>
et ensuite, j'ajoute getch();
juste avant la ligne return 0;
. C'est ce que j'ai appris à l'école quand même. Les méthodes mentionnées ci-dessus sont très différentes, je vois.
Avait le même problème. J'utilise _getch()
juste avant l'instruction return. Ça marche.
Une autre option:
#ifdef _WIN32
#define MAINRET system("pause");return 0
#else
#define MAINRET return 0
#endif
En principal:
int main(int argc, char* argv[]) {
MAINRET;
}
int main()
{
//...
getchar();
return 0;
}
Voici un moyen de garder la fenêtre de commande ouverte quelle que soit la façon dont l'exécution s'arrête sans modifier le code:
Dans Visual Studio, ouvrez Pages de propriétés du projet -> Débogage.
Pour Commande, entrez $(ComSpec)
Pour arguments de commande, entrez /k $(TargetPath)
. Ajoutez des arguments à votre propre application.
Maintenant F5 ou Ctrl-F5 exécute Windows/System32/cmd.exe dans une nouvelle fenêtre et / k garantit que l'invite de commande reste ouverte une fois l'exécution terminée.
L'inconvénient est que l'exécution ne s'arrête pas sur les points d'arrêt.
En réalité, la vraie solution est la sélection du modèle de projet lui-même. Vous DEVEZ sélectionner l’application console Win32 dans un ancien VS ou entrez d’abord le nom du projet, puis double-cliquez sur l’assistant de bureau Windows, puis sélectionnez l’application console Win32. Sélectionnez ensuite un projet vide à ce stade. Ceci permet alors à ce que le questionneur d'origine ait vraiment voulu sans ajouter de point d'arrêt supplémentaire et de code bloqué. J'ai traversé ce problème aussi. La réponse est également sur le site MSDN.
J'ai eu le même problème; Dans mon application, il y a plusieurs points exit () et il n'y avait aucun moyen de savoir exactement où il se trouvait, alors j'ai découvert ceci:
atexit(system("pause"));
ou
atexit(cin.get());
De cette façon, ça s'arrêtera peu importe où nous sortons du programme.
(Certaines options peuvent être appelées sous différents noms. Je n'utilise pas la version anglaise)
J'ai eu le même problème lorsque j'ai créé des projets avec l'option "projet vide", créer un projet en tant qu '"application Win32-console" au lieu de "projet vide". Dans la boîte de dialogue qui s'affiche, cliquez sur "Continuer", puis cochez l'option "Projet vide" et appuyez sur Confirmer. Après cela, CTRL + F5 ouvrira une console qui ne se fermera pas automatiquement.