219 votes

Comment empêcher l'application console C++ de se terminer immédiatement ?

Dernièrement, j'ai essayé d'apprendre le C++ à partir de ce site web . Malheureusement, chaque fois que j'essaie d'exécuter l'un des échantillons de code, je vois le programme s'ouvrir pendant environ une demi-seconde, puis se fermer immédiatement. Existe-t-il un moyen d'empêcher la fermeture immédiate du programme afin que je puisse voir le fruit de mes efforts ? Merci d'avance.

5 votes

Est-ce que vous double-cliquez sur l'exécutable ? Travaillez-vous sous Windows ? Pourquoi ne travaillez-vous pas à partir du shell Command et ne tapez pas les commandes telles que vous voulez qu'elles soient exécutées ?

9 votes

@S Lott : Parce que si vous appuyez sur le bouton "Go" dans votre IDE, vous n'avez pas besoin de vous embêter avec une console.

4 votes

Vous devriez envisager de vous procurer un bon livre pour apprendre le C++. Les sites Web sont de bonnes ressources, mais ils ne sont pas à la hauteur d'un bon texte d'introduction. Il existe une liste définitive de livres sur le C++ ici : stackoverflow.com/questions/388242/

143voto

nabulke Points 3874

Si vous utilisez Visual Studio et que vous démarrez l'application console à partir de l'IDE :

en appuyant sur CTRL-F5 (démarrer sans débogage) démarre l'application et laisse la fenêtre de la console ouverte jusqu'à ce que vous appuyiez sur une touche.

1 votes

Démarrer la console à partir de l'IDE ? Comment et pourquoi le faire ?

1 votes

Excellent, ça a marché. Pourquoi n'est-ce pas le comportement par défaut de Visual Studio ?

0 votes

Je pensais aussi que c'était la façon de faire, jusqu'à aujourd'hui, quand j'ai construit un simple programme en console et que la méthode ci-dessus n'a pas fonctionné :(

137voto

James McNellis Points 193607

Edit : Comme Charles Bailey le fait remarquer à juste titre dans un commentaire ci-dessous, cela ne fonctionnera pas si des caractères sont mis en mémoire tampon dans le fichier stdin et il n'y a pas vraiment de bon moyen de contourner cela. Si vous exécutez avec un débogueur attaché, La solution proposée par John Dibling est probablement la solution la plus propre à votre problème.

Cela dit, je vais laisser ce message ici et peut-être que quelqu'un d'autre le trouvera utile. Je l'ai beaucoup utilisé comme une sorte de hack rapide lors de l'écriture de tests pendant le développement.


A la fin de votre main vous pouvez appeler la fonction std::getchar();

Cela permettra d'obtenir un seul caractère de stdin Vous obtenez ainsi un comportement du type "appuyez sur n'importe quelle touche pour continuer" (si vous voulez vraiment un message "appuyez sur n'importe quelle touche", vous devrez en imprimer un vous-même).

Vous devez #include <cstdio> pour getchar .

0 votes

C'est probablement la meilleure des deux réponses pour le moment, mais je mettrais probablement un commentaire à côté pour dire pourquoi vous le faites dans le code réel. +1.

0 votes

Une autre variante de ce genre consiste à "#include <conio.h>" et à utiliser _getch().

17 votes

getchar ne résout pas le problème - ou seulement dans des circonstances limitées, du moins. Il lit un caractère de stdin mais s'il y a déjà des caractères dans la mémoire tampon de stdin, le programme continuera sans attendre, que vous imprimiez ou non une invite.

136voto

codaddict Points 154968

La solution proposée par James fonctionne pour toutes les plates-formes.

Alternativement, sur Windows vous pouvez également ajouter ce qui suit juste avant de revenir de main fonction :

  system("pause");

Ceci lancera le pause qui attend que vous appuyiez sur une touche et affiche également un message sympathique Press any key to continue . . .

2 votes

Ça ressemble à une variation Rube Goldberg d'une solution.

5 votes

@Dave Van den Eynde : C'est également assez courant et fait partie du code standard de DevCPP. +1

5 votes

D'un autre côté, @Dave indique clairement qu'il s'agit juste d'une astuce pour un exemple, alors que std:getch pourrait être accidentellement laissé dans du code réel.

85voto

Mr. Underhill Points 261

Il existe probablement un moyen beaucoup plus simple et plus propre de garder la console ouverte que d'ajouter du code supplémentaire à votre programme.

Utilisez-vous Visual C++ 2010 Express de Microsoft ou quelque chose de similaire ? Si c'est le cas, jetez un coup d'œil à ce fil de discussion MSDN .

Il est probable que votre IDE (Visual C++ 2010 Express est un IDE, si je ne me trompe pas) est configuré pour fermer la console ; en fait, un "Projet vide" dans Visual C++ 2010 ferme la console par défaut ! Pour changer cela, faites comme le suggère le modérateur de Microsoft :

Cliquez avec le bouton droit de la souris sur le nom de votre projet et allez à la page des propriétés, développez les propriétés de configuration -> Linker -> System, sélectionnez Console (/SUBSYSTEM:CONSOLE) dans la liste déroulante SubSystem. Parce que, par défaut, le projet Empty ne le spécifie pas.

Cela a résolu le problème pour moi. Bonne chance avec la programmation !

1 votes

Et si ce n'est pas une application pour console ?

3 votes

@Mr.Underhill Cela va uniquement fonctionnent si vous lancez sans le débogueur (Ctrl+F5).

0 votes

En plus d'être la seule solution non hackée, c'est aussi la seule façon de voir les impressions des destructeurs des objets de la pile principale.

16voto

Amos Points 878

Pourquoi ne pas simplement exécuter le programme à partir d'une console, c'est-à-dire exécuter le programme à partir de cmd.exe si vous utilisez Windows. De cette façon, la fenêtre reste ouverte après la fin du programme.

[EDIT] : Quand j'utilise KDevelop4, il y a une instance complète de Bash (un CLI Linux) qui tourne dans un onglet en bas de l'IDE. C'est ce que j'utilise dans ce genre de circonstances.

3 votes

Parce que si vous utilisez un IDE, vous n'utilisez généralement pas de console. Vous appuyez sur "go", le programme s'exécute, et c'est tout.

0 votes

+1 : Utiliser aveuglément l'IDE n'est pas vraiment utile. Utiliser une console pour exécuter des applications en mode console semble approprié.

3 votes

Tout IDE compétent gardera la console à l'écran lorsque l'application se termine - Code::Blocks par exemple fait exactement cela.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X