IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Console se ferme


Sujet :

C

  1. #1
    Membre actif Avatar de Belegkarnil
    Inscrit en
    Juin 2005
    Messages
    289
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Juin 2005
    Messages : 289
    Points : 205
    Points
    205
    Par défaut Console se ferme
    Bonjour, j'ai un problème. Lorsque je compile et execute mon programme, la console se ferme directement. Si je passe par le dos, je vois que mon programme tourne bien. Si je décommante une ligne, le programme ne se ferme pas tout seul. Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    #include <stdlib.h>
    #include <stdio.h>
    #include <sys/types.h>
    #include <dirent.h>
     
    #define OS "WIN"
     
    void printfln(char*);
    void getDir(char[]);
    char *concat(char*,char*,short);
     
    int main(int argc, char *argv[]){
        char repertoireCourant[256],*fichier1,*fichier2;
        getDir(repertoireCourant);
        if(OS=="WIN"){
                      fichier1=concat("\\test1.txt",repertoireCourant,2);
                      fichier2=concat("\\test2.txt",repertoireCourant,2);
    //SI Je commente la ligne du dessus tout fonctionne.
        }else{
              fichier1=concat("/test1.txt",repertoireCourant,2);
              fichier2=concat("/test2.txt",repertoireCourant,2);
        }
        printf(fichier1);
        printf(fichier2);
    //Je dois donc commenter la ligne ci-dessus aussi
        system("PAUSE");
    	return 0;
    }
    void getDir(char *string){
         getcwd(string,256);
    }
    char *concat(char *string1, char *string2,short num){
         int lg1 = strlen(string1),lg2=strlen(string2);
         char *res=malloc(sizeof(lg1+lg2+1));
         if(num==1) sprintf(res,"%s%s",string1,string2);
         else sprintf(res,"%s%s",string2,string1);
         return res;
    }

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Ben, c'est normal.
    Il en est ainsi de toutes les applications Win32 console: Contrairement aux programmes DOS sous Win9x, on ne peut plus choisir de fermer ou non en quittant.


    PS: Certains environnement de développement (pour simplifier, je dirais pratiquement tous sauf Dev-C++) s'arrangent pour éviter que le programme se ferme directement quand on exécute le programme depuis l'environnement. Mais une fois exécuté hors de l'environnement, le comportement "normal" reprend le dessus.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 68
    Points : 44
    Points
    44
    Par défaut
    rajoute [edit]avant le return

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    K4trix: Ça t'arrive de réfléchir avant de poster ?
    (retiré : Tu as réussi à dire deux bêtises (ou une et demie) en une seule phrase de 6 mots...)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Bon, ce n'est pas pour ça que ça plante, mais faire :

    #define OS "WIN"

    Et faire :
    if(OS=="WIN")

    Ce n'est pas très beau !

    Si tu veux compiler par rapport à un OS
    TU peux ajouter une commande de précompilation
    #define WIN

    Puis

    #if WIN

    #elseif PINGOUIN

    #endif

    Comme ça, tu compiles juste pour ton OS !
    Je ne répondrai à aucune question technique en privé

  6. #6
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Citation Envoyé par Médinoc
    K4trix: Ça t'arrive de réfléchir avant de poster ?
    Tu as réussi à dire deux bêtises (ou une et demie) en une seule phrase de 6 mots...

    A priori, sans regarder le code, on pourrait penser que c'est ça. Mais non...
    Je ne répondrai à aucune question technique en privé

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    C'est pourquoi j'ai dit une et demie au lieu de deux.
    Mais la une, indivisible, tient dans son post sans avoir besoin de lire ou non le code.

    Edit: Bon OK. Soit il a édité, auquel cas la faute en question n'est plus valide, soit je dois me racheter des yeux, auquel cas je présente mes humbles excuses à K4trix.
    Et comme l'Edit devrait (en théorie) apparaitre sous son post, je crois qu'il est temps que je me rachète des yeux...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Je ne vois rien d'édité !! À moins que j'ai des problèmes de vue !!
    Je ne répondrai à aucune question technique en privé

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    En fait, j'avais lu "rajoute system("PAUSE"); après le return", et là c'était évidemment une belle c****rie. Mais visiblement, j'avais mal lu.

    Et je trouve que j'ai l'insulte un peu trop facile, il est grand temps que me calme.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Aaah, d'accord !!! La chaleur surement, ça tappe sur le crane
    Je ne répondrai à aucune question technique en privé

  11. #11
    Membre confirmé Avatar de Lunixinclar
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 416
    Points : 489
    Points
    489
    Par défaut
    if (OS=="WIN") retournera toujours vrai à cause du define.

    Les progs open-source font comme ça en général:

    #ifndef WIN32
    //code non windows
    #else
    //code windows
    #endif

    En effet le define LINUX n' existe pas. Mais le WIN32, oui.

  12. #12
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    [HS]
    Citation Envoyé par Médinoc
    Edit: Bon OK. Soit il a édité, auquel cas la faute en question n'est plus valide, soit je dois me racheter des yeux, auquel cas je présente mes humbles excuses à K4trix.
    Et comme l'Edit devrait (en théorie) apparaitre sous son post, je crois qu'il est temps que je me rachète des yeux...
    Je pense que si on édite un message le jour même ou pas longtemps après, aucun message se trouve sous le post...

    Testons voir : [EDIT]effectué[/EDIT]

    [/HS]

    Jc

    [Double edit] Donc pas de message... [/Double edit]

  13. #13
    Membre actif Avatar de Belegkarnil
    Inscrit en
    Juin 2005
    Messages
    289
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Juin 2005
    Messages : 289
    Points : 205
    Points
    205
    Par défaut
    Merci de vos discutions, mais en ce qui concerne mon problème, je ne peux pas garder la console à l'écran avec ?

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Points : 542
    Points
    542
    Par défaut
    Citation Envoyé par Belegkarnil
    Merci de vos discutions, mais en ce qui concerne mon problème, je ne peux pas garder la console à l'écran avec ?
    Si.

    Moi j'aime bien aussi getch(), c'est plus vite tapé
    "La forme même des Pyramides prouve que de tous temps, les ouvriers n'ont jamais pensé qu'à en faire de moins en moins."

    G. CLEMENCEAU

  15. #15
    Membre actif Avatar de Belegkarnil
    Inscrit en
    Juin 2005
    Messages
    289
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Juin 2005
    Messages : 289
    Points : 205
    Points
    205
    Par défaut
    C'est une fonction qui attends une touche au clavier comme le readkey en pascal? Malheureusement, j'ai toujours le meme problème, en dos ca fonctionne, mais pas en l'executant normalement...

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 68
    Points : 44
    Points
    44
    Par défaut
    Peut être en mettant le programme en pause un petit moment avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #include <windows.h>
     
    ....
     
     
    Sleep(5000);
    ?

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2006
    Messages : 138
    Points : 124
    Points
    124
    Par défaut
    en ajoutant le getch() tu as toujours le probleme ?
    "C'est beau toutes vos citations"

  18. #18
    Membre confirmé Avatar de Lunixinclar
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 416
    Points : 489
    Points
    489
    Par défaut
    Ah si en plus il faut deviner la question...
    (parce que le prog qui retourne le code 0 et la console qui se ferme c'est tout à fait normal)

    #ifdef Win32
    getchar(); // ou getch
    #endif

    C'est tout. Pour linux y a rien à ajouter.

  19. #19
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par Lunixinclar
    Ah si en plus il faut deviner la question...
    (parce que le prog qui retourne le code 0 et la console qui se ferme c'est tout à fait normal)

    #ifdef Win32
    getchar(); // ou getch
    #endif

    C'est tout. Pour linux y a rien à ajouter.
    J'ai peur que ton code ne soit jamais compiler, pour windows j'ai :
    Code Windows : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Macro 	Description
        _WIN32
        _WIN64 	_WIN32 is defined for both 32-bit and 64-bit environments, whereas _WIN64 is only defined in 64-bit environments
        __WIN32__ 	Defined by Borland C++
        __TOS_WIN__ 	Defined by xlC
    Pre-defined C/C++ Compiler Macros
    Sinon la seule méthode portable est d'utiliser getchar (cette fonction fait largement l'affaire vu ce qu'on lui demande de faire ici).

  20. #20
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Le problème, c'est que si tu l'exécutes depuis la ligne de commande ou un batch, le getchar() te gênera...

    Je le répète, il est attendu d'un programme console qu'il se ferme automatiquement en quittant.

    Un truc que je te conseillerais, c'est une option de la ligne de commande pour dire "on attend à la fin", mais malheureusement on ne pourrait la spécifier que depuis la boite de dialogue exécuter ou avec un raccourci (je parle des raccourcis Windows).

    Et pour l'attente, je conseillerais le purge qu'on trouve en C: Comme une ligne n'est reçue par le programme qu'après un appui sur Entrée, on attend simplement qu'une ligne arrive et on la purge:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void purge(FILE *in)
    {
    int c;
    while((c=fgetc(in)) != '\n' && c != EOF) {}
    }

    Donc, si purge est appelé après chaque fgets(), un purge supplémentaire se contentera d'attendre une ligne et de nettoyer le buffer clavier.

    L'avantage, c'est que tu peux toujours refaire des entrées clavier par la suite.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lancer programme sans que la console se ferme
    Par tims12 dans le forum Windows
    Réponses: 1
    Dernier message: 20/09/2013, 13h47
  2. [Free Pascal] La fenêtre console se ferme trop vite
    Par SimoBenz dans le forum Free Pascal
    Réponses: 2
    Dernier message: 02/12/2006, 15h45
  3. Réponses: 10
    Dernier message: 09/11/2006, 17h07
  4. Débutant, console qui se ferme /s WinXp
    Par bobobobo01 dans le forum C
    Réponses: 13
    Dernier message: 01/12/2005, 22h53
  5. [FreePascal] Comment éviter que la console se ferme
    Par Thiboz dans le forum Free Pascal
    Réponses: 5
    Dernier message: 14/08/2005, 15h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo