Partage
  • Partager sur Facebook
  • Partager sur Twitter

Exception en point flottant

Sujet résolu
    24 juin 2010 à 3:11:25

    Bonsoir, je viens de terminer le TP sur le pendu avec toutes les améliorations, il fonctionne parfaitement bien lors que je fais "build and run" dans code blocks.

    Mais lorsque je le démarre dans ma console (je suis sous Ubuntu 10.04 64 bit), j'obtiens une "Exception en point flottant".

    Cette erreur n'apparait que avec le mode 1 joueur, après quelques essais (en mettant en remarque chaque ligne qui pourrais poser problème dans le mode un joueur) j'ai découvert que le problème provient de le fonction qui fait fonctionner mon dictionnaire :

    dico(&mot);
    


    la fonction reçoit simplement l'adresse du pointeur "mot".

    ensuite je vais voir la fonction dico donc, je place un printf pour voir ou se situe l'erreur, je le place comme ceci :

    void dico(char mot[LMAX])
    {
        printf("TEST ligne %d", __LINE__);
    
        int nummot = 0;
        char motchoisi[LMAX] = {0};
        char caractuel = 0;
    
    (...)
    


    Normalement il devrais y avoir au moins ce printf qui s'affiche o_O ?

    et bien pas du tout, j'obtiens

    Citation

    Mode 1 joueur (u) ou 2 joueurs (d) ?
    joueurs = U
    Exception en point flottant
    bastien@bastien:~$



    J'ai pu tester sur un autre ordinateur avec ubuntu 10.04 32 bits, il passe la ligne :lol: .

    Si vous avez une question ou une réponse n'hésitez pas :D.

    • Partager sur Facebook
    • Partager sur Twitter
      24 juin 2010 à 3:32:01

      Ca a l'air d'etre une erreur qui se manifeste seulement apres etre decleché, a l'instar d'un comportement indeterminé.

      J'aimerai bien avoir des renseignement sur "mot".

      Je ne connais pas cette erreur, mais apres avoir fait un coup de google, ca pourrait survenir lors d'une erreur arithmétique, tel la division par 0.

      Une bonne habitude à prendre
      • Partager sur Facebook
      • Partager sur Twitter
        24 juin 2010 à 3:45:54

        Merci d'essayer de voir d'où vient le problème à une heure si tardive :D ,

        alors mot :
        char mot[LMAX]={0};
        


        Sinon je viens de récupérer le fichier compilé sur mon ordi sous ubuntu 32 bits, quand je le lance sur mon ordi sous ubuntu 64 bits il fait le même problème (que tout a l'heure) alors qu'il fonctionne parfaitement bien (sur le 32 bits) o_O (désolé si c'est pas très clair :-° ).




        • Partager sur Facebook
        • Partager sur Twitter
          24 juin 2010 à 3:49:07

          enleve le & lors de l'appel a la fonction dico.

          Ca resoud le probleme ?
          • Partager sur Facebook
          • Partager sur Twitter
            24 juin 2010 à 4:25:22

            Non ca ne résoud pas mon problème quand je retire le "&".



            J'ai peut être une piste (voir la réponse) :

            J'ai récemment changé de fichier de dictionnaire, lorsque je met l'ancien (une dizaine de mots) le programme fonctionne, lorsque je met le nouveau (62 mots) le programme fait cette erreur :lol: bon par contre ca rajoute une question, pourquoi cette erreur apparait alors que le fichier est chargé un peut plus tard ? :

            void dico(char mot[LMAX])
            {
                 printf("TEST ligne %d", __LINE__);
            
                int nummot = 0;
                char motchoisi[LMAX] = {0};
                char caractuel = 0;
                int comptmots = 0;
                int compteur = 0;
                int compteur2 = 0;
            
            
                FILE* Fichier=NULL;
                Fichier=fopen("dico","r");
            


            PS: Je sais que mes variables ont des noms curieux :lol:
            • Partager sur Facebook
            • Partager sur Twitter
              24 juin 2010 à 4:36:21

              Donne plutôt le code qui précède l'appel de dico.
              Tu as peut-être divisé par 0 à un moment donné
              • Partager sur Facebook
              • Partager sur Twitter
                24 juin 2010 à 13:12:23

                Juste avant l'appel au dico :

                void jeu()
                {
                    char mot[LMAX]={0};
                    char motcach[LMAX]={0};
                    int nbcar = 0;
                    int carentre = 0;
                    int fin = 0;
                    int vie = LMAX;
                    int coup = 0;
                
                    dico(&mot);
                


                Le seul endroit où il y a une division (enfin plutôt un modulo) c'est ici :

                srand(time(NULL));
                nummot=(rand() % comptmots);
                


                S'il ne trouve pas de mot dans la liste, dans ce cas la ca peut faire un modulo par 0. Mais c'est bien plus loin que le printf que j'utilise pour tester (le printf est a la ligne 314 et ce petit bout est ligne 348 et 349 (j'ai pas séparé dico dans un autre fichier.c comme l'a fait l'auteur du cours)).
                • Partager sur Facebook
                • Partager sur Twitter
                  24 juin 2010 à 14:27:57

                  Mets nous tout ton code, car la je vois pas.

                  Mets nous aussi le fichier dico, celui qui fait planter et celui qui passe.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    24 juin 2010 à 14:54:08

                    Voici le code entier (il manque juste foncdessin qui se trouve dans dessin.c mais bon c'est que des printf pour dessiner le pendu)

                    Désolé c'est quasiment pas commenté :euh:

                    #include <stdio.h>
                    #include <stdlib.h>
                    #include <time.h>
                    
                    #include "main.h"
                    #include "dessin.h"
                    
                    #define LMAX 10 // en cas d'ajout de mots de plus de 8 lettres, augmenter LMAX 10, le nombre de vie est automatiquement adapté
                    
                    int main()
                    {
                        int continuer = 1;
                        char joueurs = {1};
                        char reponse = 0;
                    
                        while(continuer == 1)
                        {
                            printf("\n\nMode 1 joueur (u) ou 2 joueurs (d) ?\njoueurs = ");
                            joueurs = getchar();
                            joueurs = toupper(joueurs);
                            while (getchar() != '\n') ;
                    
                            if(joueurs == 'U')
                            {
                                jeu();
                            }
                            else if (joueurs == 'D')
                            {
                                jeu2();
                            }
                            else
                            {
                            }
                    
                            printf("\n\nVoulez vous continuer(c) ou arrêter(a) ?\n >");
                            reponse = getchar();
                            reponse = toupper(reponse);
                            while (getchar() != '\n') ;
                    
                            if(reponse == 'C')
                            {
                                continuer=1;
                            }
                            else if(reponse =='A')
                            {
                                continuer=0;
                            }
                            else
                            {
                            }
                        }
                    
                        return 0;
                    
                    }
                    
                    void jeu()
                    {
                        char mot[LMAX]={0};
                        char motcach[LMAX]={0};
                        int nbcar = 0;
                        int carentre = 0;
                        int fin = 0;
                        int vie = LMAX;
                        int coup = 0;
                    
                        dico(&mot);
                    
                        nbcar= debut(&mot);
                    
                        int motbin[LMAX] = {0};
                    
                        printf("\n\n---- Bienvenue dans le pendu ! ----\nLe mot fait %d lettres", nbcar);
                    
                        fin=comparaison(&mot, carentre,&motcach, &motbin, nbcar);
                    
                        do
                        {
                            if(fin == 0)
                            {
                    
                                vie --;
                                if (vie > 0)
                                {
                    
                                    printf("\n\n\Mot : %s\n\nQuel est le mot caché ? Il vous reste %d essai",motcach,vie);
                                    if (vie >= 2)
                                    {
                                    printf("s");
                                    }
                                    printf(".\nEntrez une lettre : ");
                                    carentre=entree();
                                    fin=comparaison(&mot, carentre,&motcach, &motbin, nbcar);
                                    if(fin != 1)
                                    {
                                    foncdessin(vie);
                                    }
                    
                                }
                                else if (vie ==0 )
                                {
                    
                                    printf("\n\n------------------------------------------------");
                                    printf("\n\n\nPENDU ! :P\nLe mot était %s.", mot);
                                    printf("\n------------------------------------------------\n\n");
                    
                                return 0;
                                }
                                else
                                {
                                }
                            }
                            else if(fin == 1)
                            {
                    
                                printf("\n\n------------------------------------------------");
                                printf("\n\nBravo, vous avez trouvé %s !", mot);
                                printf("\n------------------------------------------------\n\n");
                    
                    
                                return 0;
                            }
                            else
                            {
                            }
                        }
                        while(vie >= 0);
                    }
                    
                    void jeu2()
                    {
                    
                        char mot[LMAX]={"TEST"};
                        char motcach[LMAX]={0};
                        int nbcar = 0;
                        int carentre = 0;
                        int fin = 0;
                        int vie = LMAX;
                        int coup = 0;
                    
                        // ajout mode 2 joueurs
                    
                        printf("\n\nJoueur1 : Entrez un mot de 8 lettres maximum en MAJUSCULES\n > ");
                        gets(mot);
                    
                        nbcar= debut(&mot);
                    
                        int motbin[LMAX] = {0};
                    
                        printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nJ2 > Bienvenue dans le pendu !\nLe mot fait %d lettres", nbcar);
                    
                        //fin ajout mode 2 joueurs
                    
                        do
                        {
                            if(fin == 0)
                            {
                                vie --;
                                if (vie > 0)
                                {
                                    printf("\n\n\Mot : %s\n\nQuel est le mot caché ? Il vous reste %d essai",motcach,vie);
                                    if (vie >= 2)
                                    {
                                    printf("s");
                                    }
                                    printf(".\nEntrez une lettre : ");
                    
                                    carentre=entree();
                                    fin=comparaison(&mot, carentre,&motcach, &motbin, nbcar);
                                    if(fin != 1)
                                    {
                                    foncdessin(vie);
                                    }
                                }
                                else if (vie ==0 )
                                {
                                    printf("\n\n------------------------------------------------");
                                    printf("\n\n\nPENDU ! :P\nLe mot était %s.", mot);
                                    printf("\n------------------------------------------------\n\n");
                    
                                return 0;
                                }
                                else
                                {
                                }
                            }
                            else if(fin == 1)
                            {
                    
                                printf("\n\n------------------------------------------------");
                                printf("\n\nBravo, vous avez trouvé %s !", mot);
                                printf("\n------------------------------------------------\n\n");
                    
                    
                                return 0;
                            }
                            else
                            {
                            }
                        }
                        while(vie >= 0);
                    
                    }
                    
                    int debut(char mot[LMAX])
                    {
                    
                        int nbcar = 0;
                        int compteur=0;
                        char caractuel = 'A';
                    
                    
                        while(caractuel != '\0')
                        {
                            caractuel=mot[nbcar];
                            nbcar++;
                        }
                    
                        nbcar--;
                    
                        return nbcar;
                    }
                    
                    char entree()
                    {
                    
                        char lettre = 0;
                    
                        lettre = getchar();
                        lettre = toupper(lettre);
                    
                        while (getchar() != '\n') ;
                    
                        return lettre;
                    }
                    
                    int comparaison(char mot[LMAX],char carentre, char motcach[LMAX],int motbin[LMAX], int nbcar)
                    {
                        //mot bin est un sorte de masque du mot, si la lettre par exemple mot[1] est trouvée, motbin[1] sera a un sinon elle sera a 0 et une étoile va apparaitre à a sa place.
                        char caractuel = 'A';
                        int compteur = 0;
                        int comptfin =0;
                        int fin =0;
                        int compteur2 = 0;
                    
                    
                        while(caractuel != '\0')
                        {
                            caractuel=mot[compteur];
                    
                            if(caractuel == carentre)
                            {
                                motbin[compteur]=1;
                            }
                            compteur++;
                        }
                    
                        caractuel = 'A';
                        compteur = 0;
                    
                        while(compteur < nbcar)
                        {
                            if(motbin[compteur] == 0)
                            {
                                motcach[compteur]='*';
                            }
                            if(motbin[compteur] == 1)
                            {
                                motcach[compteur]=mot[compteur];
                                comptfin++;
                            }
                          compteur++;
                        }
                    
                        caractuel = 'A';
                        compteur = 0;
                    
                        while(compteur < nbcar)
                        {
                            caractuel=motcach[compteur];
                    
                            if(caractuel != '*')
                            {
                                compteur2++;
                            }
                    
                            compteur++;
                        }
                    
                        if(compteur2 == nbcar)
                        {
                            return 1;
                        }
                    
                        return 0;
                    }
                    
                    void dico(char mot[LMAX])
                    {
                        printf("TEST ligne %d", __LINE__);
                    
                        int nummot = 0;
                        char motchoisi[LMAX] = {0};
                        char caractuel = 0;
                    
                        int comptmots = 0;
                        int compteur = 0;
                        int compteur2 = 0;
                    
                    
                        FILE* Fichier=NULL;
                        Fichier=fopen("dico","r");
                    
                    
                    
                        if (Fichier != NULL)
                        {
                    
                            while(caractuel != EOF)
                            {
                                caractuel=fgetc(Fichier);
                                if(caractuel == 13)
                                {
                                    comptmots++;
                                }
                                else
                                {
                                }
                            }
                    
                            rewind(Fichier);
                            caractuel = 0;
                    
                            srand(time(NULL));
                            nummot=(rand() % comptmots);
                    
                            compteur=0;
                            caractuel=0;
                            nummot++;
                    
                            while(compteur != nummot)
                            {
                                caractuel=fgetc(Fichier);
                                motchoisi[0] = caractuel;
                    
                                while(caractuel != 13)
                                {
                                    compteur2++;
                                    caractuel=fgetc(Fichier);
                                    motchoisi[compteur2]=caractuel;
                    
                                }
                                compteur++;
                                compteur2 = 0;
                            }
                    
                            caractuel = 0;
                            compteur = 0;
                            while(caractuel != 13)
                            {
                                caractuel = motchoisi[compteur];
                                compteur++;
                            }
                    
                            compteur--;
                            compteur2 = 0;
                            while(compteur2 < compteur)
                            {
                                mot[compteur2]=motchoisi[compteur2];
                                compteur2++;
                            }
                    
                        }
                        else
                        {
                            printf("\n------------------------ ERREUR ------------------------");
                            printf("\n\nErreur à l'ouverture du fichier dictionnaire,\nvérifiez que dico est bien présent dans le même\ndossier que le pendu.");
                            printf("\n--------------------------------------------------------\n\n");
                            fclose(Fichier);
                            exit(0);
                        }
                    
                        fclose(Fichier);
                    }
                    


                    dico qui plante :

                    BLANC
                    BLEU
                    VERT
                    ROUGE
                    MARRON
                    VIOLET
                    JAUNE
                    ORANGE
                    NOIR
                    ROSE
                    ROUGE
                    GRIS
                    MAISON
                    IMMEUBLE
                    BATIMENT
                    HOTEL
                    GARE
                    STATION
                    MAIRIE
                    HOPITAL
                    VOITURE
                    AVION
                    TRAIN
                    METRO
                    BUS
                    CAMION
                    FOUR
                    CASEROLE
                    ASSIETTE
                    COUVERTS
                    PLAT
                    MIXEUR
                    TABLE
                    CHAISE
                    CANAPE
                    TELEPHONE
                    FAUTEUIL
                    LIT
                    ARMOIRE
                    DOUCHE
                    EVIER
                    TOILETTES
                    CHAT
                    CHIEN
                    SOURIS
                    CHEVAL
                    OISEAU
                    REPTILE
                    INSECTE
                    MUSIQUE


                    dico qui fonctionne :

                    ARBRE
                    MAISON
                    JARDIN
                    CHAT
                    MER
                    MARRON
                    POISSON
                    FLEUR
                    VERT


                    Par contre chose étrange, le petit aperçu du texte dans le fichier est différent, le bon c'est comme si tout était sur la même ligne, le mauvais c'est normal, un mot par ligne. Peut être que le retour a la ligne est different ?
                    (et comme mon programme compte les mots grâce à leur retour a la ligne, on peut se retrouver avec un comptmot = 0, et après donc avec un modulo de 0 ;) )
                    Image utilisateur

                    • Partager sur Facebook
                    • Partager sur Twitter
                      24 juin 2010 à 15:21:05

                      Citation : bastien95

                      Normalement il devrais y avoir au moins ce printf qui s'affiche o_O ?


                      Ce que tu as écrit est peut-être encore en mémoire tampon. Tu peux forcer l'affichage en faisant un appel à fflush: fflush(stdout); .
                      Ou mettre un '\n' à la fin de ta chaine, en général ça fonctionne.
                      Chez moi (Windows XP), la ligne s'affiche correctement.

                      Sinon, le code est assez gore et parsemé de nombreux warnings que tu devrais corriger:
                      -------------- Build: Release in test c2 ---------------
                      
                      Compiling: main.c
                      J:\Programmation\Projets\TESTS\test c2\main.c:5:17: warning: C++ style comments are not allowed in ISO C90
                      J:\Programmation\Projets\TESTS\test c2\main.c:5:17: warning: (this will be reported only once per input file)
                      J:\Programmation\Projets\TESTS\test c2\main.c: In function `entree':
                      J:\Programmation\Projets\TESTS\test c2\main.c:13: warning: implicit declaration of function `toupper'
                      J:\Programmation\Projets\TESTS\test c2\main.c: In function `debut':
                      J:\Programmation\Projets\TESTS\test c2\main.c:24: warning: unused variable `compteur'
                      J:\Programmation\Projets\TESTS\test c2\main.c: In function `comparaison':
                      J:\Programmation\Projets\TESTS\test c2\main.c:47: warning: unused variable `fin'
                      J:\Programmation\Projets\TESTS\test c2\main.c: In function `dico':
                      J:\Programmation\Projets\TESTS\test c2\main.c:106: warning: ISO C90 forbids mixed declarations and code
                      J:\Programmation\Projets\TESTS\test c2\main.c: In function `jeu':
                      J:\Programmation\Projets\TESTS\test c2\main.c:201: warning: passing arg 1 of `dico' from incompatible pointer type
                      J:\Programmation\Projets\TESTS\test c2\main.c:203: warning: passing arg 1 of `debut' from incompatible pointer type
                      J:\Programmation\Projets\TESTS\test c2\main.c:205: warning: ISO C90 forbids mixed declarations and code
                      J:\Programmation\Projets\TESTS\test c2\main.c:209: warning: passing arg 1 of `comparaison' from incompatible pointer type
                      J:\Programmation\Projets\TESTS\test c2\main.c:209: warning: passing arg 3 of `comparaison' from incompatible pointer type
                      J:\Programmation\Projets\TESTS\test c2\main.c:209: warning: passing arg 4 of `comparaison' from incompatible pointer type
                      J:\Programmation\Projets\TESTS\test c2\main.c:220:24: warning: unknown escape sequence '\M'
                      J:\Programmation\Projets\TESTS\test c2\main.c:227: warning: passing arg 1 of `comparaison' from incompatible pointer type
                      J:\Programmation\Projets\TESTS\test c2\main.c:227: warning: passing arg 3 of `comparaison' from incompatible pointer type
                      J:\Programmation\Projets\TESTS\test c2\main.c:227: warning: passing arg 4 of `comparaison' from incompatible pointer type
                      J:\Programmation\Projets\TESTS\test c2\main.c:241: warning: `return' with a value, in function returning void
                      J:\Programmation\Projets\TESTS\test c2\main.c:255: warning: `return' with a value, in function returning void
                      J:\Programmation\Projets\TESTS\test c2\main.c:199: warning: unused variable `coup'
                      J:\Programmation\Projets\TESTS\test c2\main.c: In function `jeu2':
                      J:\Programmation\Projets\TESTS\test c2\main.c:280: warning: passing arg 1 of `debut' from incompatible pointer type
                      J:\Programmation\Projets\TESTS\test c2\main.c:282: warning: ISO C90 forbids mixed declarations and code
                      J:\Programmation\Projets\TESTS\test c2\main.c:295:24: warning: unknown escape sequence '\M'
                      J:\Programmation\Projets\TESTS\test c2\main.c:303: warning: passing arg 1 of `comparaison' from incompatible pointer type
                      J:\Programmation\Projets\TESTS\test c2\main.c:303: warning: passing arg 3 of `comparaison' from incompatible pointer type
                      J:\Programmation\Projets\TESTS\test c2\main.c:303: warning: passing arg 4 of `comparaison' from incompatible pointer type
                      J:\Programmation\Projets\TESTS\test c2\main.c:315: warning: `return' with a value, in function returning void
                      J:\Programmation\Projets\TESTS\test c2\main.c:329: warning: `return' with a value, in function returning void
                      J:\Programmation\Projets\TESTS\test c2\main.c:273: warning: unused variable `coup'
                      Linking console executable: test c2.exe
                      Output size is 8.50 KB
                      Process terminated with status 0 (0 minutes, 0 seconds)
                      0 errors, 28 warnings

                      Pour le code suivant (un peu modifié pour le rendre compilable):
                      #include <stdio.h>
                      #include <stdlib.h>
                      #include <time.h>
                      
                      #define LMAX 10 // en cas d'ajout de mots de plus de 8 lettres, augmenter LMAX 10, le nombre de vie est automatiquement adapté
                      
                      char entree()
                      {
                      
                          char lettre = 0;
                      
                          lettre = getchar();
                          lettre = toupper(lettre);
                      
                          while (getchar() != '\n') ;
                      
                          return lettre;
                      }
                      
                      int debut(char mot[LMAX])
                      {
                      
                          int nbcar = 0;
                          int compteur=0;
                          char caractuel = 'A';
                      
                      
                          while(caractuel != '\0')
                          {
                              caractuel=mot[nbcar];
                              nbcar++;
                          }
                      
                          nbcar--;
                      
                          return nbcar;
                      }
                      
                      
                      
                      int comparaison(char mot[LMAX],char carentre, char motcach[LMAX],int motbin[LMAX], int nbcar)
                      {
                          //mot bin est un sorte de masque du mot, si la lettre par exemple mot[1] est trouvée, motbin[1] sera a un sinon elle sera a 0 et une étoile va apparaitre à a sa place.
                          char caractuel = 'A';
                          int compteur = 0;
                          int comptfin =0;
                          int fin =0;
                          int compteur2 = 0;
                      
                      
                          while(caractuel != '\0')
                          {
                              caractuel=mot[compteur];
                      
                              if(caractuel == carentre)
                              {
                                  motbin[compteur]=1;
                              }
                              compteur++;
                          }
                      
                          caractuel = 'A';
                          compteur = 0;
                      
                          while(compteur < nbcar)
                          {
                              if(motbin[compteur] == 0)
                              {
                                  motcach[compteur]='*';
                              }
                              if(motbin[compteur] == 1)
                              {
                                  motcach[compteur]=mot[compteur];
                                  comptfin++;
                              }
                            compteur++;
                          }
                      
                          caractuel = 'A';
                          compteur = 0;
                      
                          while(compteur < nbcar)
                          {
                              caractuel=motcach[compteur];
                      
                              if(caractuel != '*')
                              {
                                  compteur2++;
                              }
                      
                              compteur++;
                          }
                      
                          if(compteur2 == nbcar)
                          {
                              return 1;
                          }
                      
                          return 0;
                      }
                      
                      void dico(char mot[LMAX])
                      {
                          printf("TEST ligne %d", __LINE__);
                      
                          int nummot = 0;
                          char motchoisi[LMAX] = {0};
                          char caractuel = 0;
                      
                          int comptmots = 0;
                          int compteur = 0;
                          int compteur2 = 0;
                      
                      
                          FILE* Fichier=NULL;
                          Fichier=fopen("dico","r");
                      
                      
                      
                          if (Fichier != NULL)
                          {
                      
                              while(caractuel != EOF)
                              {
                                  caractuel=fgetc(Fichier);
                                  if(caractuel == 13)
                                  {
                                      comptmots++;
                                  }
                                  else
                                  {
                                  }
                              }
                      
                              rewind(Fichier);
                              caractuel = 0;
                      
                              srand(time(NULL));
                              nummot=(rand() % comptmots);
                      
                              compteur=0;
                              caractuel=0;
                              nummot++;
                      
                              while(compteur != nummot)
                              {
                                  caractuel=fgetc(Fichier);
                                  motchoisi[0] = caractuel;
                      
                                  while(caractuel != 13)
                                  {
                                      compteur2++;
                                      caractuel=fgetc(Fichier);
                                      motchoisi[compteur2]=caractuel;
                      
                                  }
                                  compteur++;
                                  compteur2 = 0;
                              }
                      
                              caractuel = 0;
                              compteur = 0;
                              while(caractuel != 13)
                              {
                                  caractuel = motchoisi[compteur];
                                  compteur++;
                              }
                      
                              compteur--;
                              compteur2 = 0;
                              while(compteur2 < compteur)
                              {
                                  mot[compteur2]=motchoisi[compteur2];
                                  compteur2++;
                              }
                      
                          }
                          else
                          {
                              printf("\n------------------------ ERREUR ------------------------");
                              printf("\n\nErreur à l'ouverture du fichier dictionnaire,\nvérifiez que dico est bien présent dans le même\ndossier que le pendu.");
                              printf("\n--------------------------------------------------------\n\n");
                              fclose(Fichier);
                              exit(0);
                          }
                      
                          fclose(Fichier);
                      }
                      
                      
                      void jeu()
                      {
                          char mot[LMAX]={0};
                          char motcach[LMAX]={0};
                          int nbcar = 0;
                          int carentre = 0;
                          int fin = 0;
                          int vie = LMAX;
                          int coup = 0;
                      
                          dico(&mot);
                      
                          nbcar= debut(&mot);
                      
                          int motbin[LMAX] = {0};
                      
                          printf("\n\n---- Bienvenue dans le pendu ! ----\nLe mot fait %d lettres", nbcar);
                      
                          fin=comparaison(&mot, carentre,&motcach, &motbin, nbcar);
                      
                          do
                          {
                              if(fin == 0)
                              {
                      
                                  vie --;
                                  if (vie > 0)
                                  {
                      
                                      printf("\n\n\Mot : %s\n\nQuel est le mot caché ? Il vous reste %d essai",motcach,vie);
                                      if (vie >= 2)
                                      {
                                      printf("s");
                                      }
                                      printf(".\nEntrez une lettre : ");
                                      carentre=entree();
                                      fin=comparaison(&mot, carentre,&motcach, &motbin, nbcar);
                                      if(fin != 1)
                                      {
                                      //foncdessin(vie);
                                      }
                      
                                  }
                                  else if (vie ==0 )
                                  {
                      
                                      printf("\n\n------------------------------------------------");
                                      printf("\n\n\nPENDU ! :P\nLe mot était %s.", mot);
                                      printf("\n------------------------------------------------\n\n");
                      
                                  return 0;
                                  }
                                  else
                                  {
                                  }
                              }
                              else if(fin == 1)
                              {
                      
                                  printf("\n\n------------------------------------------------");
                                  printf("\n\nBravo, vous avez trouvé %s !", mot);
                                  printf("\n------------------------------------------------\n\n");
                      
                      
                                  return 0;
                              }
                              else
                              {
                              }
                          }
                          while(vie >= 0);
                      }
                      
                      void jeu2()
                      {
                      
                          char mot[LMAX]={"TEST"};
                          char motcach[LMAX]={0};
                          int nbcar = 0;
                          int carentre = 0;
                          int fin = 0;
                          int vie = LMAX;
                          int coup = 0;
                      
                          // ajout mode 2 joueurs
                      
                          printf("\n\nJoueur1 : Entrez un mot de 8 lettres maximum en MAJUSCULES\n > ");
                          gets(mot);
                      
                          nbcar= debut(&mot);
                      
                          int motbin[LMAX] = {0};
                      
                          printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nJ2 > Bienvenue dans le pendu !\nLe mot fait %d lettres", nbcar);
                      
                          //fin ajout mode 2 joueurs
                      
                          do
                          {
                              if(fin == 0)
                              {
                                  vie --;
                                  if (vie > 0)
                                  {
                                      printf("\n\n\Mot : %s\n\nQuel est le mot caché ? Il vous reste %d essai",motcach,vie);
                                      if (vie >= 2)
                                      {
                                      printf("s");
                                      }
                                      printf(".\nEntrez une lettre : ");
                      
                                      carentre=entree();
                                      fin=comparaison(&mot, carentre,&motcach, &motbin, nbcar);
                                      if(fin != 1)
                                      {
                                     // foncdessin(vie);
                                      }
                                  }
                                  else if (vie ==0 )
                                  {
                                      printf("\n\n------------------------------------------------");
                                      printf("\n\n\nPENDU ! :P\nLe mot était %s.", mot);
                                      printf("\n------------------------------------------------\n\n");
                      
                                  return 0;
                                  }
                                  else
                                  {
                                  }
                              }
                              else if(fin == 1)
                              {
                      
                                  printf("\n\n------------------------------------------------");
                                  printf("\n\nBravo, vous avez trouvé %s !", mot);
                                  printf("\n------------------------------------------------\n\n");
                      
                      
                                  return 0;
                              }
                              else
                              {
                              }
                          }
                          while(vie >= 0);
                      
                      }
                      int main()
                      {
                          int continuer = 1;
                          char joueurs = {1};
                          char reponse = 0;
                      
                          while(continuer == 1)
                          {
                              printf("\n\nMode 1 joueur (u) ou 2 joueurs (d) ?\njoueurs = ");
                              joueurs = getchar();
                              joueurs = toupper(joueurs);
                              while (getchar() != '\n') ;
                      
                              if(joueurs == 'U')
                              {
                                  jeu();
                              }
                              else if (joueurs == 'D')
                              {
                                  jeu2();
                              }
                              else
                              {
                              }
                      
                              printf("\n\nVoulez vous continuer(c) ou arrêter(a) ?\n >");
                              reponse = getchar();
                              reponse = toupper(reponse);
                              while (getchar() != '\n') ;
                      
                              if(reponse == 'C')
                              {
                                  continuer=1;
                              }
                              else if(reponse =='A')
                              {
                                  continuer=0;
                              }
                              else
                              {
                              }
                          }
                      
                          return 0;
                      
                      }
                      
                      • Partager sur Facebook
                      • Partager sur Twitter
                        24 juin 2010 à 15:44:31

                        Oui effectivement quand je met un "\n" le message s'affiche bien :D .

                        Donc ça pourrais être ce que je pense ? :
                        Le dico qui ne fonctionne pas a des retours à la ligne étranges et comme ce programme compte le nombre de mots par rapport aux retours à la ligne, ca ferais que comptmot = 0 puis après pour piocher un chiffre au hasard il fait un modulo de comptmot qui, s'il est a 0 forcement ca ne passe pas (Exception en point flottant).

                        Oui effectivement ya un peut de ménage a faire la dedans :-°

                        • Partager sur Facebook
                        • Partager sur Twitter
                          24 juin 2010 à 16:05:40

                          tu as enormement de "passing from incatible type" et ca, c'est vraiment n'importe quoi.

                          Fais le grand menage, c'est normal que ca plante sinon
                          • Partager sur Facebook
                          • Partager sur Twitter
                            24 juin 2010 à 16:50:39

                            Je suis en train de retirer ce qui cause les warnings, pouvez vous m'expliquer ce qui cause l'erreur :

                            Citation

                            warning: passing argument 1 of ‘debut’ makes pointer from integer without a cast



                            pour :
                            nbcar= debut(mot)
                            


                            Histoire que je puisse comprendre et que je corrige moi même les autres. ;)
                            • Partager sur Facebook
                            • Partager sur Twitter
                              24 juin 2010 à 17:04:29

                              Dans le code que tu as fourni, l'appel à la fonction debut() se fait comme ceci:
                              nbcar= debut(&mot);
                              

                              Le warning ...makes pointer from integer without a cast indique un problème d'incompatibilité des types.
                              Ici, debut() prend en paramètre un tableau de char, toi tu lui envoie l'adresse d'un tableau de char.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                24 juin 2010 à 17:13:12

                                Game over IATGOF.

                                la fonction debut attend comme paramètre un tableau, certes. Mais un tableau = un pointeur qu'on incrémente en fonction de la case à laquelle on veut accéder.

                                tableau[i] revient à faire *(tableau + i) (c'est à dire la valeur de l'adresse du premier élément du tableau, plus le nombre de cases, pour arriver à la case qui nous intéresse).

                                Bref, ça à la rigueur, on s'en fiche.

                                Il faut écrire comme tu l'as dit bastien95 : nbcar= debut(mot) . Ce bout de code est juste, tu envoie bien un pointeur (l'adresse le la première case de ton tableau), et ta fonction attend bien un pointeur (également l'adresse du premier élément du tableau).


                                *a mal lu la réponse précédente... ça m'apprendra à aller trop vite*
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  24 juin 2010 à 17:27:48

                                  Citation : baki

                                  la fonction debut attend comme paramètre un tableau, certes. Mais un tableau = un pointeur qu'on incrémente en fonction de la case à laquelle on veut accéder.


                                  Non. Un tableau est implicitement converti en pointeur dans certains cas précis (quand il n'est pas l'opérande de l'opérateur sizeof , de l'opérateur unaire & et qu'il n'est pas une "chaîne littérale" utilisée pour initialiser un tableau). Cf la norme, §6.3.2.1.3

                                  Citation : baki

                                  Il faut écrire comme tu l'as dit bastien95 : nbcar= debut(mot) .


                                  Je n'ai pas dit le contraire. J'ai dit que dans le code qu'il avait fourni, il y avait écrit nbcar= debut(&mot); et que c'était donc ce qui provoquait le warning, comme je l'ai expliqué plus bas.

                                  Game Over, baki.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    24 juin 2010 à 17:29:46

                                    Citation : baki


                                    Mais un tableau = un pointeur qu'on incrémente en fonction de la case à laquelle on veut accéder.


                                    Non, d'ailleurs
                                    dico(&mot);
                                    

                                    provoquera un warning.

                                    Quelle est la différence entre un tableau et un pointeur?

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Zeste de Savoir, le site qui en a dans le citron !
                                      24 juin 2010 à 17:30:35

                                      *est honteux*

                                      J'ai lu trop vite, je croyais que tu avais dit "Il faut faire l'appel comme ça", alors que tu avais dit "tu fais l'appel comme ça.

                                      Mea Culpa, je cours éditer et barrer tout ça :p
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        24 juin 2010 à 17:32:41

                                        EDIT : Ah non c'est bon autant pour moi, une fois retiré les & il ne reste plus qu'un warning :

                                        Citation

                                        warning: the `gets' function is dangerous and should not be used.|

                                        >

                                        Bon bah j'ai plus qu'a trouver un équivalent moins dangereux
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          24 juin 2010 à 17:38:00

                                          Tes fonctions ne sont pas déclarées.

                                          Déclares le protoype de tes fonctions avant de les appeler.

                                          ou bien, place tes fonctions avant la fonction main.

                                          edit: dsl, pas vu le include <main.h> :-°
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                          Zeste de Savoir, le site qui en a dans le citron !
                                            24 juin 2010 à 17:38:56

                                            As-tu changé les deux appels à la fonction debut() ?
                                            Quand tu fais des modifications sur ton code, penses à poster ton nouveau code à la fin de ton post pour qu'on puisse suivre le code à jour (entre les balises <secret> </secret> , pour ne pas prendre trop de place).

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              24 juin 2010 à 17:45:11

                                              Que puis-je utiliser pour remplacer gets ? (scanf ca marche mais c'est pas terrible, lorsque l'on demande pour la 1ere fois la lettre en mode 2 joueurs ca saute le 1er essais(surement le \0 d'avant qui se retrouve la ou il ne devrais pas être)).

                                              EDIT: pour remplacer gets j'ai utilisé la solution expliquée dans : http://www.siteduzero.com/tutoriel-3-1 [...] ecurisee.html
                                              ^^
                                              Je vous renvoie mon code (maintenant le mode 1 et 2 joueurs est dans la même fonction):

                                              - main.c

                                              #include <stdio.h>
                                              #include <stdlib.h>
                                              #include <time.h>
                                              #include <ctype.h>
                                              
                                              #include "main.h"
                                              //#include "dessin.h"
                                              
                                              #define LMAX 10
                                              
                                              int main()
                                              {
                                                  //déclaration des variables
                                                  int continuer = 1;
                                                  char reponse = 0;
                                              
                                                  // si le joueur veut continuer, le jeu redémarre
                                                  while(continuer == 1)
                                                  {
                                                      jeu();
                                                      //demande si le joueur veut continuer
                                                      printf("\n\nVoulez vous continuer(c) ou arrêter(a) ?\n >");
                                                      reponse = getchar();
                                                      reponse = toupper(reponse);
                                                      while (getchar() != '\n') ;
                                              
                                                      if(reponse == 'C')
                                                      {
                                                          continuer=1;
                                                      }
                                                      else if(reponse =='A')
                                                      {
                                                          continuer=0;
                                                      }
                                                      else
                                                      {
                                                      }
                                                  }
                                                  //fin du jeu
                                                  return 0;
                                              
                                              }
                                              
                                              void jeu()
                                              {
                                                  char mot[LMAX]={0}; //contient le mot
                                                  char motcach[LMAX]={0}; // mot tel qu'il est affiché
                                                  int nbcar = 0;
                                                  int carentre = 0;
                                                  int fin = 0;
                                                  int vie = LMAX;
                                                  int motbin[LMAX] = {0}; // masque permettant d'afficher ou masquer les lettres
                                                  char joueurs = 1;
                                              
                                                          //demande utilisation mode 1 ou 2 joeurs
                                                      printf("\n\nMode 1 joueur (u) ou 2 joueurs (d) ?\njoueurs = ");
                                                      joueurs = getchar();
                                                      joueurs = toupper(joueurs);
                                                      while (getchar() != '\n') ;
                                              
                                                      if(joueurs == 'U')
                                                      {
                                                          //mode 1 joueur selectionné
                                              
                                                          // selection d'un mot avec le dictionnaire
                                                          dico(mot);
                                              
                                                      }
                                                      else if (joueurs == 'D')
                                                      {
                                                          //mode 2 joueurs selectionné
                                                          printf("\n\nJoueur1 : Entrez un mot de 8 lettres maximum en MAJUSCULES\n > ");
                                                          char *retourfgets = NULL;
                                                          retourfgets=fgets(mot, 9, stdin); //recupere le mot entré
                                                          printf("\nPressez une touche");
                                                          videbuffer(); //le buffer est vidé afin qu'il ne reste plus le '\0' qui dépace
                                                          printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nJ2 > ");
                                              
                                              
                                                      }
                                                      else
                                                      {
                                                      }
                                              
                                                  // determination du nombre de lettres
                                                  nbcar=debut(mot);
                                              
                                                  printf("\n\n---- Bienvenue dans le pendu ! ----\nLe mot fait %d lettres", nbcar);
                                              
                                                  // premiere comparaison pour afficher les étoiles
                                                  fin=comparaison(mot, carentre,motcach, motbin, nbcar);
                                              
                                                  do//tant qu'il reste des vies
                                                  {
                                                      if(fin == 0 || fin == -1) // -1 correspond a lettre trouvée, 0 a pas trouvée, 1 fin du jeu
                                                      {
                                                          if (vie > 0)
                                                          {
                                              
                                                              printf("\n\nMot : %s\n\nQuel est le mot caché ? Il vous reste %d essai",motcach,vie);
                                                              if (vie >= 2)
                                                              {
                                                              printf("s");
                                                              }
                                                              printf(".\nEntrez une lettre : ");
                                              
                                                              //demande d'une lettre
                                                              carentre=entree();
                                              
                                                              //comparaison entre la lettre entrée et le mot
                                                              fin=comparaison(mot, carentre,motcach, motbin, nbcar);
                                              
                                                              if(fin != -1) // si la lettre a été trouvée (-1) ne pas retirer de vie
                                                              {
                                                              vie--;
                                                              }
                                              
                                                   /*           //affichage du dessin sauf si le jeu est terminé
                                                              if(fin != 1)
                                                              {
                                                              foncdessin(vie);
                                                    */          }
                                              
                                                          }
                                                          // si ne nombre de vie = 0, le joueur a perdu
                                                          else if (vie ==0 )
                                                          {
                                              
                                                              printf("\n\n------------------------------------------------");
                                                              printf("\n\n\nPENDU ! :P\nLe mot était %s.", mot);
                                                              printf("\n------------------------------------------------\n\n");
                                              
                                                          return ;
                                                          }
                                                          else
                                                          {
                                                          }
                                                      }
                                                      else if(fin == 1)
                                                      {
                                                          // quand le joueur a trouvé toutes les lettres, il a gagné
                                                          printf("\n\n------------------------------------------------");
                                                          printf("\n\nBravo, vous avez trouvé %s !", mot);
                                                          printf("\n------------------------------------------------\n\n");
                                              
                                                          return ;
                                                      }
                                                      else
                                                      {
                                                      }
                                                  }
                                                  while(vie >= 0);
                                              }
                                              
                                              int debut(char mot[LMAX])
                                              {
                                              
                                                  int nbcar = 0;
                                                  char caractuel = 'A';
                                              
                                                  // comptage du nombre de lettres dans le mot \0 inclu
                                                  while(caractuel != '\0')
                                                  {
                                                      caractuel=mot[nbcar];
                                                      nbcar++;
                                                  }
                                                  // le \0 est retiré du nombre de lettres
                                                  nbcar--;
                                              
                                                  return nbcar;
                                              }
                                              
                                              char entree()
                                              {
                                              
                                                  char lettre = 0;
                                                  // permet d'obtenir la lettre entrée par le joueur
                                                  lettre = getchar();
                                                  lettre = toupper(lettre);
                                              
                                                  while (getchar() != '\n') ; // permet d'obtenir seulement la lettre tapée, sans le \0 deriere (donné dans le TP sur le site du Zero)
                                              
                                                  return lettre;
                                              }
                                              
                                              int comparaison(char mot[LMAX],char carentre, char motcach[LMAX],int motbin[LMAX], int nbcar)
                                              {
                                                  char caractuel = 'A';
                                                  int compteur = 0;
                                                  int comptfin =0;
                                                  int compteur2 = 0;
                                                  int bonlettre = 0;
                                              
                                                  //la comparaison entre la lettre entrée et le mot est placée dans mot bin
                                                  while(caractuel != '\0')
                                                  {
                                                      caractuel=mot[compteur];
                                              
                                                      if(caractuel == carentre)
                                                      {
                                                          motbin[compteur]=1;
                                                          bonlettre = -1;
                                                      }
                                                      compteur++;
                                                  }
                                              
                                                  caractuel = 'A';
                                                  compteur = 0;
                                              
                                                  //le masque de motbin est appliqué au mot qui sera affiché, si la case = 0 une * va apparaitre,
                                                  // si elle est a 1 la lettre va apparaitre.
                                                  while(compteur < nbcar)
                                                  {
                                                      if(motbin[compteur] == 0)
                                                      {
                                                          motcach[compteur]='*';
                                                      }
                                                      if(motbin[compteur] == 1)
                                                      {
                                                          motcach[compteur]=mot[compteur];
                                                          comptfin++;
                                                      }
                                                    compteur++;
                                                  }
                                              
                                                  caractuel = 'A';
                                                  compteur = 0;
                                              
                                                  //le nombre de lettres trouvés par l'utilisateur est compté
                                                  while(compteur < nbcar)
                                                  {
                                                      caractuel=motcach[compteur];
                                              
                                                      if(caractuel != '*')
                                                      {
                                                          compteur2++;
                                                      }
                                              
                                                      compteur++;
                                                  }
                                                  //si le nombre de lettres trouvés est égal au nombre du lettres du mot, alors le joueur a gagné, fin = 1
                                                  if(compteur2 == nbcar)
                                                  {
                                                      return 1;
                                                  }
                                              
                                                  return bonlettre; // si la lettre a été trouvée = -1, si elle n'a pas été trouvé =0
                                              }
                                              
                                              void dico(char mot[LMAX])
                                              {
                                                  int nummot = 0;
                                                  char motchoisi[LMAX] = {0};
                                                  char caractuel = 0;
                                              
                                                  int comptmots = 0;
                                                  int compteur = 0;
                                                  int compteur2 = 0;
                                              
                                                  // ouverture du fichier en lecture
                                                  FILE* Fichier=NULL;
                                                  Fichier=fopen("dico","r");
                                              
                                                  // si le fichier est libre on l'ouvre
                                                  if (Fichier != NULL)
                                                  {
                                                      // le nombre de mots qui constitue le dico est compté
                                                      while(caractuel != EOF)
                                                      {
                                                          caractuel=fgetc(Fichier);
                                                          if(caractuel == 13)
                                                          {
                                                              comptmots++;
                                                          }
                                                          else
                                                          {
                                                          }
                                                      }
                                              
                                                      //remise a 0 du curseur et de caractuel
                                                      rewind(Fichier);
                                                      caractuel = 0;
                                              
                                                      //si comptmots = 0 le programme est arreté, pour eviter une exception en point flottant
                                                      if(comptmots == 0)
                                                      {
                                                          printf("\n------------------------ ERREUR ------------------------");
                                                          printf("\n\nErreur à l'ouverture du fichier dictionnaire,\nvérifiez que dico.txt est bien présent dans le même\ndossier que le pendu.");
                                                          printf("\n--------------------------------------------------------\n\n");
                                              
                                                          return;
                                                      }
                                              
                                                      //un chiffre est choisi au hasard pour selectionner un mot
                                                      srand(time(NULL));
                                                      nummot=(rand() % comptmots);
                                              
                                                      //remise a zero des compteurs
                                                      compteur=0;
                                                      caractuel=0;
                                                      nummot++;
                                              
                                                      //le curseur est placé a l'endroit où se trouve le mot choisi
                                                      while(compteur != nummot)
                                                      {
                                                          caractuel=fgetc(Fichier);
                                                          motchoisi[0] = caractuel;
                                              
                                                          while(caractuel != 13)
                                                          {
                                                              compteur2++;
                                                              caractuel=fgetc(Fichier);
                                                              motchoisi[compteur2]=caractuel;
                                              
                                                          }
                                                          compteur++;
                                                          compteur2 = 0;
                                                      }
                                              
                                                      //remise a zero des compteurs
                                                      caractuel = 0;
                                                      compteur = 0;
                                              
                                                      //lcurseur est placé au début de la premiere ligne
                                                      while(caractuel != 13)
                                                      {
                                                          caractuel = motchoisi[compteur];
                                                          compteur++;
                                                      }
                                              
                                                      //le mot choisi est copié dans mot
                                                      compteur--;
                                                      compteur2 = 0;
                                              
                                                      while(compteur2 < compteur)
                                                      {
                                                          mot[compteur2]=motchoisi[compteur2];
                                                          compteur2++;
                                                      }
                                              
                                                  }
                                                  else
                                                  {
                                                      printf("\n------------------------ ERREUR ------------------------");
                                                      printf("\n\nErreur à l'ouverture du fichier dictionnaire,\nvérifiez que dico.txt est bien présent dans le même\ndossier que le pendu.");
                                                      printf("\n--------------------------------------------------------\n\n");
                                                      fclose(Fichier);
                                                      exit(0);
                                                  }
                                              
                                                  // fermeture du fichier
                                                  fclose(Fichier);
                                              }
                                              
                                              void videbuffer()
                                              {
                                                 int car = 0;
                                              
                                                 while (car !='\n' && car != EOF)
                                                 {
                                                     car=getchar();
                                                 }
                                              }
                                              



                                              - main.h

                                              #define LMAX 10
                                              int debut(char mot[LMAX]);
                                              int comparaison(char mot[LMAX],char carentre, char motcach[LMAX],int motbin[LMAX], int nbcar);
                                              char entree();
                                              void dico(char mot[LMAX]);
                                              void jeu();
                                              void videbuffer();
                                              


                                              PS: J'ai mis en remarque la fonction foncdessin, elle n'est pas hyper utile et m'obligerais a vous donner dessin.c et dessin.h


                                              Bon bah le problème du dico n'est plus la et plus aucun warning, je met le sujet comme résolut, merci de votre aide ^^
                                              • Partager sur Facebook
                                              • Partager sur Twitter

                                              Exception en point flottant

                                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                              • Editeur
                                              • Markdown