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

Je commence en Visual C ++ et j’aimerais savoir comment conserver la fenêtre de la console.

Par exemple, ce serait une application typique “bonjour monde”:

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

Quelle est la ligne qui me manque?

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

La fenêtre de la console rest maintenant ouverte avec Press any key to continue . . . Press any key to continue . . . message après la sortie du programme.

Notez que cela nécessite l’option de l’éditeur de liens Console (/SUBSYSTEM:CONSOLE) , que vous pouvez activer comme suit:

  1. Ouvrez votre projet et accédez à l’explorateur de solutions. Si vous suivez avec moi dans K & R, votre “solution” sera “bonjour” avec 1 projet en dessous, aussi “bonjour” en gras.
  2. Faites un clic droit sur le “bonjour” (ou quel que soit le nom de votre projet).
  3. Choisissez “Propriétés” dans le menu contextuel.
  4. Choisissez Propriétés de configuration> Éditeur de liens> Système.
  5. Pour la propriété “Sous-système” dans le volet de droite, cliquez sur la liste déroulante dans la colonne de droite.
  6. Choisissez “Console (/ SUBSYSTEM: CONSOLE)”
  7. Cliquez sur Appliquer, attendez la fin de la tâche, puis cliquez sur OK. (Si “Appliquer” est grisé, choisissez une autre option de sous-système, cliquez sur Appliquer, puis revenez en arrière et appliquez l’option de la console. Mon expérience est que OK en lui-même ne fonctionnera pas.)

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

(Avec l’aimable autorisation de DJMorreTX à l’ adresse 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 de return .

Vous l’exécutez dans le débogueur, non?

Une autre option est d’utiliser

 #include  system("pause"); 

Bien que ce ne soit pas très portable car il ne fonctionnera que sous Windows, mais il imprimera automatiquement

Appuyez sur n’importe quelle touche pour continuer…

Pour les projets de makefile, la solution acceptée échoue en raison d’un bogue dans Visual Studio (présent au moins jusqu’à la version 2012 – je n’ai pas encore testé 2013). Ce bug est détaillé ici .

Pour que la console se mette en pause après la fin du programme sur un projet makefile, procédez comme suit (cela peut être différent pour les versions autres que 2010 – 2012):

1) Passez /SUBSYSTEM:CONSOLE à l’éditeur de liens.EDIT : voir ci-dessous.

2) Ouvrez votre fichier de projet (.vcxproj) dans un éditeur de texte.

3) Dans la racine , insérez les éléments suivants:

   Console   

4) Rechargez le projet dans votre solution.

5) Exécutez le programme sans déboguer (CTRL + F5).

MODIFIER:

Selon mon commentaire ci-dessous, définir l’option de l’éditeur de liens /SUBSYSTEM:CONSOLE est en fait sans importance pour les projets de makefile (et pas nécessairement même si vous utilisez un compilateur autre que MSVC). Tout ce qui compte, c’est que le paramètre est ajouté au fichier .vcxproj, conformément à l’étape 3 ci-dessus.

Vous pouvez utiliser cin.get(); ou cin.ignore(); juste avant votre déclaration de retour pour éviter la fermeture de la fenêtre de la console.

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 besoin d’append de code pour déboguer.

Il suffit de mettre un point d’arrêt sur le dernier crochet de main.

  int main () { //...your code... return 0; } //<- breakpoint here 

ça marche pour moi, pas besoin de courir sans débogage. Il exécute également des destructeurs avant de bash le point d'arrêt afin que vous puissiez vérifier tous les messages imprimés sur ces destructeurs, si vous en avez.

Placez un point d’arrêt sur l’accolade finale de main() . Il sera déclenché même avec plusieurs déclarations de return . Le seul inconvénient est qu’un appel à exit() ne sera pas intercepté.

Si vous ne déboguez pas, suivez les conseils de la réponse de Zoidberg et lancez votre programme avec Ctrl + F5 au lieu de F5 .

cin.get () ou système (“PAUSE”). Je n’ai pas entendu dire que vous pouvez utiliser return (0);

#include et ensuite, ajoutez getch(); juste avant le return 0; ligne. C’est ce que j’ai appris à l’école de toute façon. Les méthodes mentionnées ci-dessus sont très différentes, je vois.

Eu le même problème. J’utilise _getch () juste avant la déclaration de retour. Ça marche.

J’ai eu le même problème; Dans mon application, il y a plusieurs points de sortie () 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, cela s’arrêtera peu importe où nous sortons du programme.

Mes 2 cents:

Choix 1: Ajouter un point d’arrêt à la fin de main()

Choix 2: Ajouter 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::max(), '\n'); 

Vous devez inclure pour std::numeric_limits

(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, lorsque 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 dialog qui apparaît maintenant, vous appuyez sur “continuer” et après 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.

vous pouvez simplement mettre keep_window_open (); avant le retour, voici un exemple

 int main() { cout<<"hello world!\n"; keep_window_open (); return 0; } 

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; } 

ajoutez simplement le système (“pause”) à la fin du code avant de retourner 0 comme ceci

 int main() { some code goes here system("pause") return 0; } 

En fait, la vraie solution est la sélection du modèle de projet lui-même. Vous DEVEZ sélectionner l’application de la console Win32 dans les versions antérieures de 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 original voulait vraiment sans append de point d’arrêt supplémentaire et de code de maintien. J’ai aussi traversé ce problème. La réponse est également sur le site MSDN.

Voici un moyen de garder la fenêtre de commande ouverte quelle que soit l’arrêt de l’exécution sans modifier aucun code:

Dans Visual Studio, ouvrez Pages de propriétés du projet -> Débogage .

Pour la 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 rest ouverte une fois l’exécution terminée.

L’inconvénient est que l’exécution ne s’arrêtera pas sur les points d’arrêt.