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

dernièrement, j'ai essayé d'apprendre le C++ de ce site web . Malheureusement, lorsque j'essaie d'exécuter l'un des exemples de code, je vois que le programme ouvert pendant environ une demi-seconde, puis fermer immédiatement. Y a-t-il un moyen d'empêcher la fermeture immédiate du programme pour que je puisse voir les fruits de mes efforts?

170
demandé sur Peter Mortensen 2010-03-27 17:29:41

30 réponses

Edit: comme Charles Bailey le souligne à juste titre dans un commentaire ci-dessous, cela ne marchera pas s'il y a des caractères tamponnés dans stdin , et il n'y a vraiment pas de bonne façon de travailler autour de cela. Si vous utilisez un débogueur, la solution proposée par John Dibling est probablement la solution la plus propre à votre problème.

cela dit, je vais laisser ça ici et peut-être que quelqu'un d'autre le trouvera utile. Je l'ai utilisé beaucoup comme un piratage rapide de sortes lors de l'écriture de tests pendant le développement.


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

Cela donnera un caractère unique à partir de stdin , vous donnant ainsi le" appuyez sur n'importe quelle clé pour continuer "sorte de comportement (si vous voulez réellement un message" appuyez sur n'importe quelle clé", vous aurez à imprimer vous-même).

vous devez #include <cstdio> pour getchar .

105
répondu James McNellis 2017-05-23 12:10:47

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

presser Ctrl-F5 (démarrer sans débogage) va démarrer l'application et garder la fenêtre de la console ouverte jusqu'à ce que vous appuyez sur une touche.

128
répondu nabulke 2010-03-27 15:20:25

la solution de James fonctionne pour toutes les plateformes.

alternativement sur Windows vous pouvez aussi ajouter ce qui suit juste avant votre retour de main la fonction:

  system("pause");

cela lancera la commande pause qui attend jusqu'à ce que vous appuyez sur une touche et affiche également un beau message Press any key to continue . . .

88
répondu codaddict 2010-03-27 15:04:33

si vous utilisez le Visual C++ 2010 Express de Microsoft et que vous rencontrez le problème avec Ctrl+F5 ne fonctionne pas pour garder la console ouverte après que le programme est terminé, jetez un oeil à ce fil MSDN .

votre IDE est probablement réglé pour fermer la console après un essai CTRL+F5; en fait, un "projet vide" dans Visual C++ 2010 ferme la console par défaut. Pour changer cela, faites comme le modérateur de Microsoft a suggéré:

veuillez cliquer avec le bouton droit de la souris sur le nom de votre projet et aller à la page Propriétés, s'il vous plaît étendre propriétés de Configuration -> Linker -> système, s'il vous plaît sélectionner Console (/sous-système:CONSOLE) dans la liste déroulante du sous-système. Parce que, par défaut, le projet Vide ne le précisez pas.

69
répondu Mr. Underhill 2015-05-18 20:52:21

d'habitude, je mets juste un point de rupture sur le corset bouclé de main() . Quand la fin du programme est atteinte par quelque moyen que ce soit le point de rupture va frapper et vous pouvez Alt-Tab à la fenêtre de la console pour voir la sortie.

18
répondu John Dibling 2010-03-27 16:08:38

Pourquoi ne pas simplement exécuter le programme à partir d'une console ie 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 complète de Bash (un CLI Linux) tournant dans un onglet au bas de l'IDE. C'est ce que j'utilise dans ce genre de circonstances.

13
répondu Amos 2010-03-27 16:39:00

Call cin.get(); 2 fois:

    //...
    cin.get();
    cin.get();
    return 0
}
8
répondu tsx 2012-06-17 15:25:03

Avant la fin de votre code, insérez cette ligne:

system("pause");

cela gardera la console jusqu'à ce que vous appuyez sur une touche.

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string s;
    cout << "Please enter your first name followed by a newline\n";
    cin >> s;
    cout << "Hello, " << s << '\n';
    system("pause"); // <----------------------------------
    return 0; // This return statement isn't necessary
}
8
répondu robert 2014-12-18 17:54:47

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, le gardant ouvert lorsque l'application ferme. 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'utilisez pour de vrai, en dehors de l'IDE.

4
répondu 2010-03-27 14:51:00

OK je suppose que vous êtes sur Windows en utilisant Visual Studio... pourquoi? Eh bien, parce que si vous êtes sur une sorte de système D'exploitation Linux, vous l'exécuterez probablement depuis la console.

de toute façon, vous pouvez ajouter de la merde à la fin de votre programme comme d'autres le suggèrent, ou vous pouvez simplement cliquer sur Ctrl + F5 (démarrer sans débogage) et Visual Studio quittera la console une fois terminée.

une autre option si vous voulez lancer le Déboguer la version et ne pas ajouter de merde à votre code est d'ouvrir la fenêtre de la console (Start -> Run -> cmd) et de naviguer à votre Debug output directory . Ensuite, entrez le nom de votre exécutable et il lancera votre programme de débogage dans la console. Vous pouvez alors utiliser L'attache de Visual Studio au processus ou quelque chose si vous voulez vraiment.

3
répondu Polaris878 2010-03-27 16:07:53

si vous déboguez réellement votre application en C++ visuel, appuyez sur F5 ou le triangle vert sur la barre d'outils. Si vous n'êtes pas vraiment en train de le déboguer (vous n'avez aucun point de rupture défini), appuyez sur Ctrl+F5 ou choisissez Démarrer sans déboguer sur les menus (c'est généralement sur le menu de débogage, ce qui est source de confusion.) Il sera un peu plus rapide, et plus important pour vous, fera une pause à la fin sans que vous ayez à changer votre code.

alternativement, ouvrez une invite de commande, naviguez vers le dossier où se trouve votre exe et exécutez-le en tapant son nom. De cette façon, lorsque l'invite de commande est terminée, elle ne se ferme pas et vous pouvez voir la sortie. Je préfère ces deux méthodes pour ajouter du code qui arrête l'application tout comme son fini.

2
répondu Kate Gregory 2010-03-27 15:21:58

il suffit d'ajouter ce qui suit à la fin de votre programme. Il va essayer de capturer une certaine forme d'entrée de l'utilisateur ainsi il empêche la console de se fermer automatiquement.

cin.get();
2
répondu Bat_Programmer 2011-10-04 10:42:48

ajouter les lignes suivantes avant toute fonction exit() ou avant toute fonction return s dans main() :

std::cout << "Paused, press ENTER to continue." << std::endl;
cin.ignore(100000, "\n");
2
répondu Thomas Matthews 2014-04-04 16:57:34

pour Visual Studio (et seulement Visual Studio) l'extrait de code suivant vous donne un prompt' wait for keypress to continue ' qui attend vraiment que l'utilisateur appuie sur une touche nouvelle explicitement, en vidant d'abord le tampon d'entrée:

#include <cstdio>
#include <tchar.h>
#include <conio.h>

_tprintf(_T("Press a key to continue "));
while( _kbhit() /* defined in conio.h */ ) _gettch();
_gettch();

notez que cela utilise la macro tchar.h pour être compatible avec plusieurs 'jeux de caractères' (comme VC++ les appelle).

2
répondu MicroVirus 2015-05-18 20:45:00

je viens de le faire:

//clear buffer, wait for input to close program
std::cin.clear(); std::cin.ignore(INT_MAX, '\n');
std::cin.get();
return 0;

Note: le déblocage du tampon cin n'est nécessaire que si vous avez utilisé cin plus tôt dans votre programme. Aussi utiliser std:: numeric_limits:: max() est probablement mieux que INT_MAX, mais c'est un peu verbeux et généralement inutile.

2
répondu GuestPerson00001 2015-12-11 20:36:01

utilisez #include "stdafx.h" & system("pause"); comme le code ci-dessous.

#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
    std::cout << "hello programmer!\n\nEnter 2 numbers: ";
    int x, y;
    std::cin >> x >> y;
    int w = x*y;
    std::cout <<"\nyour answer is: "<< w << endl;
    system("pause");
}
1
répondu Mohammed Nouh 2017-02-14 15:33:16

idée similaire à yeh réponse, alternative minimaliste.

créer un fichier par lot avec le contenu suivant:

helloworld.exe
pause

puis utiliser le fichier batch.

1
répondu Cœur 2017-03-19 17:21:55
#include "stdafx.h"
#include <iostream>
#include <conio.h>

using namespace std;

int main()
{

    cout << "Press any key to continue...";
    getch();

    return 0;
}

Je n'ai pas remarqué que quelqu'un d'autre avait posté ceci donc le voici.

1
répondu Ruan 2017-04-05 07:11:14

voir si votre IDE a une case à cocher dans le paramètre project pour garder la fenêtre ouverte après la fin du programme. Si non, utilisez std::cin.get(); pour lire un caractère à la fin de la fonction principale. Cependant, assurez-vous d'utiliser uniquement des entrées basées sur la ligne (std::getline) ou de traiter les caractères non lus restants autrement (std::ignore until newline) parce que sinon le .get () à la fin ne lira que les ordures que vous avez laissées non lues plus tôt.

0
répondu Tronic 2010-03-27 14:45:33

Cela semble bien fonctionner:

cin.clear();
cin.ignore(2);

si vous effacez le tampon en premier, ce ne sera pas un problème lorsque vous lirez le suivant. Pour une raison quelconque, 151910920" ne fonctionne pas, il doit être 2.

0
répondu Northcode 2011-12-31 22:29:23

tout ce que vous avez à faire définir une variable pour x alors il suffit de taper ce dans avant le retour 0;

cout<<"\nPress any key and hit enter to end...";
cin>>x;
0
répondu Friendly advice 2012-09-17 08:09:59

vous pouvez même déclarer un entier au début de votre fonction main() (dire int a; ) et mettre std::cin >> a; juste avant la valeur de retour. Ainsi, le programme continuera à fonctionner jusqu'à ce que vous appuyez sur une touche et entrez.

0
répondu Izza 2014-12-18 17:53:46

vous pouvez toujours créer un fichier batch. Par exemple, si votre programme s'appelle helloworld.exe, quelque code serait:

@echo off
:1
cls
call helloworld.exe
pause >nul
goto :1
0
répondu yeh 2014-12-18 17:55:23

je mets un point de rupture au dernier retour 0 du programme. Il fonctionne très bien.

0
répondu lierosk 2014-12-18 20:15:31

simplement

int main(){
    // code...
    getchar();
    getchar();
    return 0;
}
0
répondu Dmitriy Suserov 2014-12-19 10:26:34

j'ai utilisé cin.get() et qui est travaillé, mais un jour, j'ai dû utiliser un autre cin.get([Array Variable]) avant que pour saisir une corde ling avec le caractère blanc au milieu de. ainsi, le cin.get() n'a pas évité la fermeture de la fenêtre d'invite de commande. Finalement, 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. Il vous posera juste des questions sur la fermeture après l'exécution des commandes finales.

0
répondu QMaster 2015-06-16 14:45:40

j'ai essayé de mettre une fonction getchar() à la fin. Mais il ne fonctionne pas. J'ai donc ajouté deux fonctions getchar() l'une après l'autre. Je pense que le premier getchar() absorbe la touche Enter que vous appuyez après la dernière entrée de données. Alors essayez d'ajouter deux getchar() fonctions au lieu d'un

0
répondu Samriddhi Sinha 2015-12-19 03:25:26

au lieu d'appuyer sur le bouton d'exécution, appuyez sur CTRL et F5 en même temps, il vous donnera la pression n'importe quelle clé pour continuer le message. Ou tapez "(attention utilisez ceci seulement pour tester pas de programmes réels comme un antivirus ne l'aime pas!!!!)" à la fin de votre fonction principale, mais: (attention à utiliser seulement pour des tests réels des programmes antivirus n'aime pas ça!!!!)

0
répondu anony 2016-04-03 14:47:25

utilisez cin.ignorer() juste avant le return 0; deux fois

main()
  {
  //your codes 

  cin.ignore();
  cin.ignore();

  return 0;
  }

thats tous

0
répondu Kursat Turkay 2017-08-28 16:04:09

si vous utilisez Windows, alors vous pouvez faire system("pause >nul"); ou system("pause"); . Il exécute une commande de la console pour mettre le programme en pause jusqu'à ce que vous appuyez sur une touche. >nul l'empêche de dire Press any key to continue... .

-1
répondu PatThaCoder 2014-12-18 20:15:08