Je débute dans Visual C ++ et j'aimerais savoir comment conserver la fenêtre de la console.
Par exemple, ce serait une application typique "bonjour le monde":
int _tmain(int argc, _TCHAR* argv[])
{
cout << "Hello World";
return 0;
}
Quelle est la ligne qui me manque?
visual-c++
console
Raúl Roa
la source
la source
Réponses:
Démarrez le projet avec Ctrl+F5au lieu de simplement F5.
La fenêtre de la console restera désormais ouverte avec le
Press any key to continue . . .
message après la fermeture du programme.Notez que cela nécessite l'
Console (/SUBSYSTEM:CONSOLE)
option de l' éditeur de liens, que vous pouvez activer comme suit:CTRL-F5 et les conseils de sous-système fonctionnent ensemble; ce ne sont pas des options distinctes.
(Gracieuseté de DJMorreTX de http://social.msdn.microsoft.com/Forums/en-US/vcprerelease/thread/21073093-516c-49d2-81c7-d960f6dc2ac6 )
la source
cin.get(),getchar(), system("pause")
ou tout autre garbage. Changer cela fonctionne.system("pause");
à la fin de votre code. Cela a du sens et fonctionne bien.La méthode standard est
cin.get()
avant votre déclaration de retour.la source
_tmain
. Je voterais un autre -1 pour lecin.get()
au lieu de placer un point d'arrêt pour F5 ou d'utiliser Ctrl F5. Mais je n'ai droit qu'à un vote défavorable._tmain
? C'est la manière standard d'écrire une application Windows ciblant le sous-système de la console. S'écarter de cette norme serait une mauvaise pratique. De toute évidence, personne ne parle de code portable ici; la question indique Visual C ++ et_tmain
est la signature qui apparaît dans l'exemple de code. Il est temps d'abandonner cette religion. Windows est "non standard" par défaut, et il existe de très bonnes raisons de suivre ses standards._tmain
est parce qu'il est totalement non standard (le standard international C ++ nécessite un simplemain
), et parce qu'il utilise leT
schéma de macro de Microsoft , qui est une complication et un verbiage inutiles pour prendre en charge Windows 9x. Si vous pensez que s'écarter de la norme est une mauvaise pratique, vous ne devez absolument pas l'utilisertmain
. Il n'y a pas de bonnes raisons d'utilisertmain
, sauf pour la pêche à la traîne ou, pour les professionnels, pour afficher son incompétence totale.Mettez un point d'arrêt sur la
return
ligne.Vous l'exécutez dans le débogueur, non?
la source
Une autre option consiste à utiliser
Bien que ce ne soit pas très portable car il ne fonctionnera que sur Windows, mais il imprimera automatiquement
la source
system
est déclaré dans<stdlib.h>
.Pour les projets makefile, la solution acceptée échoue, en raison d'un bogue dans Visual Studio (qui est présent 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 fin du programme sur un projet makefile, procédez comme suit (cela peut différer pour les versions autres que 2010-2012):
1) Passez- MODIFIER : voir ci-dessous./SUBSYSTEM:CONSOLE
à l'éditeur de liens.2) Ouvrez votre fichier projet (.vcxproj) dans un éditeur de texte.
3) À l'intérieur de la
<project>
balise racine , insérez ce qui suit:4) Rechargez le projet dans votre solution.
5) Exécutez le programme sans débogage (CTRL + F5).
ÉDITER:
Selon mon commentaire ci-dessous, la définition de l'option de l'éditeur de liens
/SUBSYSTEM:CONSOLE
n'est en fait pas pertinente pour les projets makefile (et pas nécessairement même possible, si vous utilisez un compilateur autre que MSVC). Tout ce qui compte, c'est que le paramètre soit ajouté au fichier .vcxproj, comme indiqué à l'étape 3 ci-dessus.la source
/SUBSYSTEM:CONSOLE
à l'éditeur de liens n'est en fait pas pertinent - l'étape 3 est tout ce qui compte. Gardez à l'esprit que ma réponse concerne les projets makefile - dans un projet makefile, l'EDI n'a aucun moyen de savoir ce que vous passez à l'éditeur de liens (vous n'utilisez peut-être même pas un compilateur qui a une/SUBSYSTEM:CONSOLE
option), et c'est le projet lui-même qui garde une trace de si oui ou non il est censé être un programme de console. Je modifierai ma réponse en conséquence.Vous pouvez utiliser
cin.get();
oucin.ignore();
juste avant votre déclaration de retour pour éviter que la fenêtre de la console ne se ferme.la source
il suffit de mettre un point d'arrêt sur la dernière parenthèse de main.
cela fonctionne pour moi, pas besoin de courir sans débogage. Il exécute également des destructeurs avant d'atteindre le point d'arrêt afin que vous puissiez vérifier tous les messages imprimés sur ces destructeurs si vous en avez.
la source
Ajoutez simplement un point d'arrêt à la parenthèse fermante de votre
_tmain
méthode. C'est le moyen le plus simple et vous n'avez pas besoin d'ajouter de code pour déboguer.la source
Placez un point d'arrêt sur l'accolade de fin de
main()
. Il sera déclenché même avec plusieursreturn
déclarations. Le seul inconvénient est qu'un appel àexit()
ne sera pas pris.Si vous n'êtes pas en train de déboguer, suivez les conseils de la réponse de Zoidberg et démarrez votre programme avec Ctrl+ F5au lieu de simplement F5.
la source
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;
:Vous devez inclure
<iomanip>
pourstd::numeric_limits
la source
ajoutez simplement le système ("pause") à la fin du code avant de retourner 0 comme ceci
la source
la source
cin.get()
, ousystem("PAUSE")
. Je n'ai pas entendu que vous pouvez utiliserreturn(0);
la source
J'inclus
#include <conio.h>
et ensuite, j'ajoutegetch();
juste avant lareturn 0;
ligne. C'est ce que j'ai appris à l'école de toute façon. Les méthodes mentionnées ci-dessus ici sont assez différentes, je vois.la source
Avait le même problème. J'utilise
_getch()
juste avant l'instruction de retour. Ça marche.la source
(Certaines options peuvent être appelées par des noms différents. Je n'utilise pas la version anglaise)
J'ai eu le même problème, quand j'ai créé des projets avec l'option "projet vide", Créer un projet comme "application Win32-console" au lieu de "projet vide". Dans la boîte de dialogue qui apparaît maintenant, vous appuyez sur "continuer" et après cela vous pouvez cocher l'option "projet vide" et appuyer sur confirmer. Après cela, CTRL + F5 ouvrira une console qui ne se ferme pas automatiquement.
la source
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 sort, alors j'ai découvert ceci:
ou
De cette façon, il s'arrêtera peu importe où nous sortirons du programme.
la source
atexit
.atexit
prend un pointeur de fonction, pas un entier.Une autre option:
En général:
la source
En fait, la vraie solution est la sélection du modèle de projet lui-même. Vous DEVEZ sélectionner l'application console Win32 dans les anciens VS, ou remplir d'abord le nom du projet, puis double-cliquer sur l'assistant Windows Desktop, puis sélectionner l'application console Win32. Sélectionnez ensuite un projet vide à ce stade. Cela permet alors ce que le questionneur d'origine voulait vraiment sans ajouter de point d'arrêt supplémentaire et de code de maintien. J'ai également traversé ce problème. La réponse est également sur le site MSDN.
la source
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 les pages de propriétés du projet -> Débogage .
Pour Commande , entrez
$(ComSpec)
Pour les 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êtera pas aux points d'arrêt.
la source
Comme certains l'ont déjà souligné, la solution Zoidbergs n'attache pas le débogueur, ce que vous ne voulez généralement pas.
La meilleure option imo est de configurer votre VS en conséquence (à partir de VS 2017), en allant dans Outils> Options> Débogage> Général. Là, vous décochez "Fermer automatiquement la console lorsque le débogage s'arrête" (tout en bas), ce qui est probablement coché dans votre cas.
la source
vous pouvez simplement mettre keep_window_open (); avant le retour voici un exemple
la source