Question

Ces derniers temps, j'ai essayé d'apprendre C ++ de ce site . Malheureusement, chaque fois que je tente d'exécuter l'un des exemples de code, je vois ce programme ouvert pendant environ une demi-seconde, puis immédiatement à proximité. Y at-il un moyen d'arrêter le programme de fermer immédiatement afin que je puisse voir les fruits de mes efforts?

Était-ce utile?

La solution

Modifier Comme Charles Bailey souligne à juste titre dans un commentaire ci-dessous, cela ne fonctionnera pas s'il y a des personnages 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 attaché, solution proposée de John Dibling est probablement la solution la plus propre à votre problème.

Cela dit, je vais laisser cela ici et peut-être quelqu'un d'autre trouvera utile. Je l'ai utilisé beaucoup comme un hack de toutes sortes lors de l'écriture des tests au cours du développement.


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

obtiendra un seul caractère de stdin, vous donnant ainsi le genre de comportement « appuyer sur une touche pour continuer » (si vous voulez vraiment un message « appuyez sur une touche », vous devrez imprimer un vous-même).

Vous devez #include <cstdio> pour getchar.

Autres conseils

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

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

La solution par James travaille pour toutes les plates-formes.

Vous pouvez sur Windows vous pouvez également ajouter ce qui suit juste avant votre retour de la fonction main:

  system("pause");

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

Si vous utilisez Microsoft Visual C ++ 2010 Express et exécuter dans le problème avec CTRL + F5 ne fonctionne pas pour garder la console ouverte après que le programme a pris fin, jetez un oeil à this thread MSDN .

probable que votre IDE est réglé pour fermer la console après un CTRL + F5 run; en fait, un « projet vide » dans Visual C ++ 2010 ferme la console par défaut. Pour changer cela, faire comme Microsoft Modérateur suggéré:

  

S'il vous plaît faites un clic droit de votre nom de projet et aller à la page Propriétés, s'il vous plaît développez Propriétés de configuration -> Linker -> Système, s'il vous plaît sélectionnez Console (/ SUBSYSTEM: CONSOLE) dans la liste déroulante SubSystem. Parce que, par défaut, le projet vide ne précise pas.

D'habitude, je viens de mettre un point d'arrêt sur l'accolade fermante de main(). Lorsque la fin du programme est atteint par tous les moyens le point d'arrêt frappera et vous pouvez Alt-Tab à la fenêtre de la console pour afficher la sortie.

Pourquoi ne pas exécuter tout le programme à partir d'une console-à-dire exécuter le programme à partir cmd.exe si vous utilisez Windows. De cette façon, la fenêtre reste ouverte après que le programme se termine.

[EDIT]: Lorsque j'utilise KDevelop4 il y a une instance à part entière de Bash (CLI Linux) en cours d'exécution dans un onglet au bas de l'EDI. Ce qui est ce que j'utilise dans ce genre de circonstances.

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

system("pause");

Cela permet de garder 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
}

Appel cin.get(); 2 fois:

    //...
    cin.get();
    cin.get();
    return 0
}

Si vous exécutez votre code à partir d'un IDE compétent, comme Code :: Blocks , l'IDE gérer la console qu'il utilise pour exécuter le code, le garder ouvert lorsque l'application se ferme. Vous ne voulez pas ajouter un code spécial pour garder la console ouverte, parce que cela fonctionne correctement l'empêcher lorsque vous l'utilisez pour de vrai, en dehors de l'IDE.

D'accord, 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, alors vous seriez probablement en cours d'exécution depuis la console.

Quoi qu'il en soit, vous pouvez ajouter de la merde à la fin de votre programme comme d'autres sont ce qui suggère, ou vous pouvez simplement frapper CTRL + F5 (démarrage sans débogage) et Visual Studio quittera la console une fois complète .

Une autre option si vous voulez exécuter la version de débogage et ne pas ajouter de la merde à votre code est d'ouvrir la fenêtre de la console (Démarrer -> Exécuter -> cmd) et accédez à Répertoire de sortie de débogage . Ensuite, il suffit d'entrer le nom de votre exécutable et il exécutera votre programme de débogage dans la console. Vous pouvez ensuite utiliser Visual Studio attach de traiter ou de quelque chose si vous voulez vraiment.

Si vous déboguez réellement votre application dans Visual C ++, appuyez sur F5 ou le triangle vert sur la barre d'outils. Si vous (vous n'avez pas points d'arrêt) déboguez pas vraiment, appuyez sur Ctrl + F5 ou cliquez sur Démarrer sans débogage sur les menus (il est généralement dans le menu Debug, que je suis d'accord est source de confusion.) Ce sera un peu plus vite, et plus important pour vous, fera une pause à la fin sans que vous ayez à changer votre code.

Vous pouvez également ouvrir une invite de commande, accédez au dossier dans lequel votre exe est, et l'exécuter en tapant son nom. De cette façon, quand il a terminé l'exécution de l'invite de commande ne se ferme pas et vous pouvez voir la sortie. Je préfère ces deux méthodes pour ajouter du code qui empêche l'application tout comme fini.

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 arrête la console de se fermer automatiquement.

cin.get();

Ajoutez les lignes suivantes avant toute fonction exit() ou avant toute returns en main():

std::cout << "Paused, press ENTER to continue." << std::endl;
cin.ignore(100000, "\n");

Pour Visual Studio (et seulement Visual Studio) l'extrait de code suivant vous donne un « attendre keypress pour continuer » rapide qui attend vraiment pour l'utilisateur d'appuyer sur un nouveau clé explicitement, par premier rinçage 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 de tchar.h pour être compatible avec plusieurs « jeux de caractères » (comme VC ++ les appelle).

Je fais ceci:

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

Note: la mémoire tampon de compensation de cin et tel est uniquement nécessaire si vous avez utilisé cin à un moment donné plus tôt dans votre programme. De plus en utilisant std :: numeric_limits :: max () est probablement mieux que INT_MAX, mais il est un peu verbeux et le plus souvent inutile.

Utilisez #include "stdafx.h" & system("pause"); comme le code en bas.

#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");
}
#include "stdafx.h"
#include <iostream>
#include <conio.h>

using namespace std;

int main()
{

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

    return 0;
}

Je ne ai pas remarqué quelqu'un d'autre ce poste si elle est ici.

idée Similaire à Yeh réponse, juste solution minimaliste.

Créez un fichier batch avec le contenu suivant:

helloworld.exe
pause

Ensuite, utilisez le fichier batch.

Voyez si votre IDE a une case à cocher dans le projet réglage pour garder la fenêtre ouverte après que le programme se termine. Sinon, utilisez std::cin.get(); pour lire un caractère à la fin de la fonction principale. Cependant, assurez-vous d'utiliser uniquement l'entrée basé sur la ligne (std :: getline) ou pour traiter des caractères non lus restants autrement (std :: ignore jusqu'à nouvelle ligne) car sinon le .get () à la fin ne lira que les ordures vous avez quitté non lu plus tôt.

Cela semble bien fonctionner:

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

Si vous désactivez le tampon premier il ne sera pas un problème lorsque vous lisez le prochain. Pour certains cin.ignore(1) raison ne fonctionne pas, il doit être 2.

Vous pouvez toujours créer simplement un fichier de commandes. Par exemple, si votre programme est appelé helloworld.exe, un code serait:

@echo off
:1
cls
call helloworld.exe
pause >nul
goto :1

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

Je suis en train d'un point d'arrêt au dernier retour 0 du programme. Il fonctionne très bien.

simplement

int main(){
    // code...
    getchar();
    getchar();
    return 0;
}

je cin.get() et qui est travaillé, mais un jour je devais utiliser un autre cin.get([Array Variable]) avant que de saisir une chaîne ling avec caractère blanc au milieu de. de sorte que le cin.get() n'a pas évité fenêtre d'invite de commande de fermeture. Enfin, je trouvé une autre façon: Appuyez sur CTRL + F5 pour ouvrir dans une fenêtre externe et Visual Studio ne pas avoir le contrôle sur plus. Il suffit de vous poser des questions sur la fermeture après les commandes finales exécuter.

J'ai essayé de mettre une fonction getchar() à la fin. Mais cela n'a pas fonctionné. Donc, ce que je faisais était d'ajouter deux fonctions getchar() un après l'autre. Je pense que la première getchar() absorbe la sur la touche Entrée vous appuyez après la dernière entrée de données. Donc, essayez d'ajouter deux fonctions getchar() au lieu d'un

Au lieu d'appuyer sur le bouton d'exécution, appuyez sur CTRL et F5 en même temps, il vous donnera la presse une touche pour continuer un message. Ou le type « (utilisation d'avertissement ce que pour tester des programmes non réels comme un anti-virus ne l'aime pas !!!!) » à la fin de votre fonction principale, mais: (utilisation d'avertissement ce que pour tester des programmes non réels comme un don anti-virus « t like it !!!!)

il suffit d'utiliser juste avant le retour 0 cin.ignore (); deux fois

main()
  {
  //your codes 

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

  return 0;
  }

thats all

Tout ce que vous avez à faire pour définir une variable x, puis tapez ceci avant le retour 0;

cout<<"\nPress any key and hit enter to end...";
cin>>x;

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top