207 votes

Comment garder la fenêtre de la console ouverte dans Visual C++ ?

Je débute en Visual C++ et j'aimerais savoir comment conserver la fenêtre de la console.

Par exemple, il s'agit d'une application typique de type "hello world" :

int _tmain(int argc, _TCHAR* argv[])
{
    cout << "Hello World";
    return 0;
}

Quelle est la ligne que je manque ?

0 votes

Amruth A. Pillai votre code ne montre pas "press any key to continue" merci

0 votes

Vous pouvez l'imprimer vous-même avec un simple appel à std::cout.

6 votes

L'inconvénient de toutes les solutions proposées est qu'aucune d'entre elles ne fonctionne avec le débogage (Ctrl+F5 échoue ici) et lorsque l'application s'arrête de manière inattendue (tous les points d'arrêt ou les lectures de stdin au retour principal échouent ici). Ce que j'aimerais voir, c'est une fenêtre de console dans l'IDE comme Eclipse et d'autres IDEs. Ils continuent simplement à afficher la sortie vers stdout/stderr après la fin du programme.

406voto

Zoidberg Points 1746

Démarrez le projet avec Ctrl + F5 au lieu de simplement F5 .

La fenêtre de la console reste maintenant ouverte avec l'icône Press any key to continue . . . après la sortie du programme.

Notez que cela nécessite l'utilisation de l'option Console (/SUBSYSTEM:CONSOLE) que vous pouvez activer comme suit :

  1. Ouvrez votre projet, et allez dans l'explorateur de solutions. Si vous me suivez dans K&R, votre "Solution" sera "hello" avec un projet en dessous, également "hello" en gras.
  2. Cliquez avec le bouton droit de la souris sur l'icône "hello" (ou le nom de votre projet).
  3. Choisissez "Propriétés" dans le menu contextuel.
  4. Choisissez Configuration Properties>Linker>System.
  5. Pour la propriété "Sous-système" dans le volet de droite, cliquez sur la boîte déroulante dans la colonne de droite.
  6. Choisissez "Console (/SUBSYSTEM:CONSOLE)".
  7. Cliquez sur Appliquer, attendez qu'il finisse de faire ce qu'il fait, puis cliquez sur OK. (Si "Appliquer" est grisé, choisissez une autre option du sous-système, cliquez sur Appliquer, puis revenez en arrière et appliquez l'option de la console. D'après mon expérience, OK seul ne fonctionne pas).

CTRL-F5 et les conseils du sous-système fonctionnent ensemble ; ce ne sont pas des options distinctes.

(Courtoisie de DJMorreTX de http://social.msdn.microsoft.com/Forums/en-US/vcprerelease/thread/21073093-516c-49d2-81c7-d960f6dc2ac6 )

42 votes

Ceci exécute le programme sans déboguer ; il est préférable d'avoir une solution qui fonctionne à la fois en mode débogage et en mode d'exécution ordinaire.

3 votes

Pour tous ceux qui ne parviennent pas à faire fonctionner cette solution dans un projet makefile, cela est dû à un bogue dans Visual Studio. Je viens de poster une réponse avec le correctif.

1 votes

Peut confirmer ! J'avais une application console qui ne fonctionnait pas, je l'ai fait et ça a marché. Vous n'avez pas besoin de modifier votre code avec cin.get(),getchar(), system("pause") ou tout autre déchet. Modifier ce travail.

42voto

Gordon Wilson Points 14721

La méthode standard est la suivante cin.get() avant votre déclaration de retour.

int _tmain(int argc, _TCHAR* argv[])
{
    cout << "Hello World";
    cin.get();
    return 0;
}

4 votes

Je sais que puisque le programme utilise déjà cout, cela a déjà été pris en charge, mais je pense qu'il est utile de mentionner que vous aurez besoin de #include <iostream> ainsi que d'utiliser l'espace de nom std : std::cin.get().

7 votes

Cela fonctionne mais le Ctrl+F5 est bien meilleur, en particulier lorsqu'il s'agit de suivre la destruction globale d'un objet, etc.

0 votes

C'est une mauvaise solution : que se passe-t-il si votre programme se termine par exit() ?

23voto

280Z28 Points 49515

Mettez un point d'arrêt sur le return ligne.

Vous l'exécutez dans le débogueur, n'est-ce pas ?

15 votes

La plupart du temps difficile car il peut y avoir plusieurs points de sortie dans le programme

0 votes

Le programme peut ne pas démarrer à cause d'une DLL manquante, et ne jamais atteindre ce point d'arrêt.

19voto

Marcos Marin Points 346

Une autre option consiste à utiliser

#include <process.h>
system("pause");

Bien que cette méthode ne soit pas très portable car elle ne fonctionne que sous Windows, elle permet d'imprimer automatiquement les documents suivants

Appuyez sur n'importe quelle touche pour continuer...

1 votes

System("pause") Gardera votre processeur en marche, il ne devrait pas être utilisé. Utilisez un cin.get() ou un équivalent.

0 votes

system est déclaré dans <stdlib.h> .

0 votes

@Krythic Je viens de l'essayer et il n'a pas mangé 100% du CPU. L'utilisation de mon processeur était à 0% - 1% tout le temps. Impossible à reproduire.

4voto

CMS Points 315406

Vous pouvez utiliser cin.get(); o cin.ignore(); juste avant votre déclaration de retour pour éviter que la fenêtre de la console ne se ferme.

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