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 exemples de code, je vois ce 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 les fruits de mes efforts?
193
Réponses:
Edit: comme Charles Bailey le souligne à juste titre dans un commentaire ci-dessous, cela ne fonctionnera pas s'il y a des personnages en mémoire tampon
stdin
, et il n'y a vraiment pas de bon moyen de contourner cela. Si vous utilisez un débogueur attaché, la solution suggérée par John Dibling est probablement la solution la plus propre à votre problème.Cela dit, je vais laisser cela ici et peut-être que quelqu'un d'autre le trouvera utile. Je l'ai beaucoup utilisé comme hack rapide lors de l'écriture de tests pendant le développement.
À la fin de votre
main
fonction, vous pouvez appelerstd::getchar();
Cela obtiendra un seul caractère
stdin
, vous donnant ainsi le type de comportement "appuyez sur n'importe quelle touche pour continuer" (si vous voulez réellement un message "appuyez sur n'importe quelle touche", vous devrez en imprimer un vous-même).Vous devez
#include <cstdio>
pourgetchar
.la source
getchar
ne résout pas le problème - ou seulement dans des circonstances limitées, du moins. Il lit un caractère à partir destdin
, mais s'il y a déjà des caractères mis en mémoire tampon à partir de stdin, le programme continuera sans attendre, que vous imprimiez une invite ou non.\n
est une solution partielle, mais n'aidera pas si plusieurs lignes d'entrée sont mises en mémoire tampon. Je ne connais pas de méthode C ++ standard pour tout effacer d'un flux d'entrée. : - /std::cin.ignore(std::cin.rdbuf()->in_avail());
? Je l'ai d' ici .std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
avec#include <limits>
.Si vous utilisez Visual Studio et que vous démarrez l'application console à partir de l'EDI:
appuyer sur CTRL-F5 (démarrer sans débogage) démarrera l'application et gardera la fenêtre de la console ouverte jusqu'à ce que vous appuyiez sur une touche.
la source
La solution de James fonctionne pour toutes les plateformes.
Alternativement,
Windows
vous pouvez également ajouter les éléments suivants juste avant de revenir de lamain
fonction:Cela exécutera la
pause
commande qui attend que vous appuyiez sur une touche et affiche également un joli messagePress any key to continue . . .
la source
Si vous utilisez Visual C ++ 2010 Express de Microsoft et rencontrez le problème avec CTRL + F5 ne fonctionnant pas pour garder la console ouverte après la fin du programme, jetez un œil à ce thread MSDN .
Votre IDE est probablement configuré pour fermer la console après une exécution CTRL + F5; en fait, un «projet vide» dans Visual C ++ 2010 ferme la console par défaut. Pour changer cela, faites comme suggéré par le modérateur Microsoft:
la source
Je mets habituellement juste un point d'arrêt sur
main()
l'accolade bouclée de fermeture. Lorsque la fin du programme est atteinte par quelque moyen que ce soit, le point d'arrêt va frapper et vous pouvez ALT-Tab à la fenêtre de la console pour afficher la sortie.la source
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]: Lorsque j'utilise KDevelop4, il y a une instance à part entière de Bash (une CLI Linux) fonctionnant dans un onglet au bas de l'IDE. C'est ce que j'utilise dans ce genre de circonstances.
la source
main
est définie, mais si je ne la place pas explicitement sur la ligne de commande, VS tue la fenêtre lorsque l'application se ferme. soupirmain
dans le projet, l'éditeur de liens utilise par défaut le sous-système CONSOLE. Lors du débogage ou de l'exécution, vous obtiendrez une fenêtre de console. Toutefois, sauf si vous spécifiez explicitement CONSOLE comme sous-système dans les propriétés du projet, Visual Studio ne gardera pas la fenêtre de console ouverte. Je pars toujours d'un projet vide et je modifie rarement les propriétés d'un projet individuel, donc je n'ai jamais vu la fenêtre de la console rester. Désolé pour la confusionAvant la fin de votre code, insérez cette ligne:
Cela gardera la console jusqu'à ce que vous appuyiez sur une touche.
la source
Appelez
cin.get();
2 fois:la source
Si vous exécutez votre code à partir d'un IDE compétent, tel que Code :: Blocks , l'IDE gérera la console qu'il utilise pour exécuter le code, en le gardant ouvert à la fermeture de l'application. Vous ne voulez pas ajouter de code spécial pour garder la console ouverte, car cela l'empêchera de fonctionner correctement lorsque vous l'utiliserez pour de vrai, en dehors de l'EDI.
la source
D'accord, je suppose que vous utilisez Windows avec Visual Studio ... pourquoi? Eh bien parce que si vous utilisez un système d'exploitation Linux, vous l'exécuterez probablement à partir de la console.
Quoi qu'il en soit, vous pouvez ajouter de la merde à la fin de votre programme comme d'autres le suggèrent, ou vous pouvez simplement appuyer sur CTRL + F5 (démarrer sans débogage) et Visual Studio quittera la console une fois terminée.
Une autre option si vous souhaitez exécuter la version de débogage sans ajouter de conneries à votre code consiste à ouvrir la fenêtre de la console (Démarrer -> Exécuter -> cmd) et à naviguer vers votre répertoire de sortie de débogage . Ensuite, entrez simplement le nom de votre exécutable et il exécutera votre programme de débogage dans la console. Vous pouvez ensuite utiliser l'attachement de Visual Studio pour traiter ou quelque chose si vous le souhaitez vraiment.
la source
Je n'ai pas remarqué que quelqu'un d'autre a posté cela, alors le voici.
la source
conio.h
s'agit d'un en-tête spécifique à Windows et peut ne pas être disponible sur toutes les machines (ou vous devrez peut-être le lier séparément, ce qui est exagéré).Si vous déboguez réellement votre application dans Visual C ++, appuyez sur F5 ou sur le triangle vert de la barre d'outils. Si vous ne le déboguez pas vraiment (vous n'avez pas de points d'arrêt définis), appuyez sur Ctrl + F5 ou choisissez Démarrer sans débogage dans les menus (c'est généralement dans le menu Déboguer, ce qui, je le reconnais, prête à confusion). Ce sera un peu plus rapide, et plus important pour vous, s'arrêtera à la fin sans que vous ayez à changer votre code.
Sinon, ouvrez une invite de commande, accédez au dossier où se trouve votre exe et exécutez-le en tapant son nom. De cette façon, une fois l'exécution terminée, l'invite de commande ne se ferme pas et vous pouvez voir la sortie. Je préfère ces deux méthodes à l'ajout de code qui arrête l'application au moment où elle est terminée.
la source
Ajoutez simplement ce qui suit à la fin de votre programme. Il essaiera de capturer une certaine forme d'entrée utilisateur, empêchant ainsi la console de se fermer automatiquement.
la source
Ajoutez les lignes suivantes avant toute
exit()
fonction ou avant toutreturn
s dansmain()
:la source
Pour Visual Studio (et uniquement Visual Studio), l'extrait de code suivant vous donne une invite `` attendre que la pression sur la touche continue '' qui attend vraiment que l'utilisateur appuie explicitement sur une nouvelle touche, en vidant d'abord le tampon d'entrée:
Notez que cela utilise les
tchar.h
macros pour être compatible avec plusieurs «jeux de caractères» (comme VC ++ les appelle).la source
Je fais juste ceci:
Remarque: l'effacement du tampon cin et ainsi de suite n'est nécessaire que si vous avez utilisé cin à un moment donné plus tôt dans votre programme. Utiliser également std :: numeric_limits :: max () est probablement mieux que INT_MAX, mais c'est un peu verbeux et généralement inutile.
la source
Utilisez
#include "stdafx.h"
&system("pause");
comme le code ci-dessous.la source
system
est déclaré en<cstdlib>
, nonstdafx.h
.Idée similaire à yeh réponse, juste solution minimaliste.
Créez un fichier de commandes avec le contenu suivant:
Utilisez ensuite le fichier batch.
la source
simplement
pour une raison quelconque, il est généralement possible de lire 1 caractère avec getchar déjà dans stdin lorsque vous exécutez un programme. donc le premier getchar lit ce caractère, et le second getchar attend l'entrée utilisateur (votre) avant de quitter le programme. Et après qu'un programme quitte la plupart des terminaux, en particulier sur Windows, fermez immédiatement le terminal. donc ce que nous visons est un moyen simple d'empêcher un programme de se terminer après avoir tout sorti. Bien sûr, il existe des moyens plus complexes et plus propres de résoudre ce problème, mais c'est le plus simple.
la source
Vérifiez si votre IDE a une case à cocher dans le paramètre de projet pour garder la fenêtre ouverte après la fin du programme. Sinon, utilisez
std::cin.get();
pour lire un caractère à la fin de la fonction principale. Cependant, assurez-vous d'utiliser uniquement une entrée basée sur la ligne (std :: getline) ou de traiter les restes de caractères non lus sinon (std :: ignore jusqu'à la nouvelle ligne) car sinon le .get () à la fin ne lira que les ordures que vous avez laissées non lu plus tôt.la source
Cela semble bien fonctionner:
Si vous effacez d'abord le tampon, ce ne sera pas un problème lorsque vous lirez le suivant. Pour une raison quelconque,
cin.ignore(1)
cela ne fonctionne pas, il doit être 2.la source
cin.rdbuf()->in_avail
,. Pas un nombre magique comme 1 ou 2.Vous pouvez toujours simplement créer un fichier de commandes. Par exemple, si votre programme s'appelle helloworld.exe, du code serait:
la source
Si vous exécutez Windows, vous pouvez faire
system("pause >nul");
ousystem("pause");
. Il exécute une commande de console pour suspendre le programme jusqu'à ce que vous appuyiez sur une touche.>nul
l'empêche de direPress any key to continue...
.la source
Je mets un point d'arrêt au dernier retour 0 du programme. Ça fonctionne bien.
la source
J'ai utilisé
cin.get()
et cela fonctionne, mais un jour, j'ai dû en utiliser un autrecin.get([Array Variable])
avant cela pour saisir une chaîne ling avec un caractère vide au milieu de. lacin.get()
fenêtre d'invite de commande n'a donc pas été fermée. Enfin, j'ai trouvé une autre façon: appuyez sur CTRL + F5 pour ouvrir dans une fenêtre externe et Visual Studio n'a plus de contrôle sur elle. Je vais juste vous poser des questions sur la fermeture après l'exécution des dernières commandes.la source
J'ai essayé de mettre une
getchar()
fonction à la fin. Mais ça n'a pas marché. J'ai donc ajouté deuxgetchar()
fonctions l'une après l'autre. Je pense que le premiergetchar()
absorbe la Entertouche sur laquelle vous appuyez après la dernière entrée de données. Essayez donc d'ajouter deuxgetchar()
fonctions au lieu d'unela source
Au lieu d'appuyer sur le bouton d'exécution, appuyez sur CTRL et F5 en même temps, il vous donnera la touche n'importe quelle touche pour continuer le message. Ou tapez "(avertissement utilisez ceci uniquement pour tester des programmes non réels car un antivirus ne l'aime pas !!!!)" à la fin de votre fonction principale mais: (avertissement utilisez ceci uniquement pour tester des programmes non réels comme un antivirus ne le faites pas 'aime pas !!!!)
la source
utilisez simplement cin.ignore () juste avant de retourner 0; deux fois
c'est tout
la source
Il vous suffit de définir une variable pour x, puis de la saisir avant le retour 0;
la source
Vous pouvez même déclarer un entier au début de votre
main()
fonction (disonsint a;
) et le mettrestd::cin >> a;
juste avant la valeur de retour. Ainsi, le programme continuera de fonctionner jusqu'à ce que vous appuyiez sur une touche et entriez.la source