Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème pour une fonction du Pendu

conflicting types for 'devoileMot'

Sujet résolu
    15 avril 2006 à 10:26:17

    Bonjour,

    J'essaye en ce moment de coder mon jeu du Pendu, mais j'ai un petit problème avec une de mes fonctions :
    char motATrouver[TAILLE_MAX] = "BLADEEE", caractereJoueur = 0;
    long tailleMot = strlen(motATrouver);
    int reponseCaracterePresent = 0;
    caractereJoueur = lireCaractere();

    void devoileMot(char motATrouver[TAILLE_MAX], long tailleMot, char caractereJoueur)
    {
        long i;
        char caractereACrypter;

        for (i = 0; i<tailleMot; i++)
        {
                    motATrouver[i];
                    if (motATrouver[i] != caractereJoueur)
                    {
                            caractereACrypter = motATrouver[i];
                            caractereACrypter = '*';
                            printf("%c", caractereACrypter);
                    }
                    else
                    {
                            printf("%c",caractereJoueur);
                    }
        }
            printf("\n");
    }


    Et j'ai cette erreur :
    conflicting types for 'devoileMot'


    Pouvez-vous m'aider sans me donner de correction de code de Pendu, je voudrais y arriver presque tout seul...merci d'avance.

    PS: J'ai pas mis tout le code, si vous voulez que je le mette dites le moi mais il est encore un peu brouillon (les fonctions sont dans le main etc...)

    Edit : Apparement j'ai trouvé mon erreur c'est que lorsque j'appuyais sur F9 pour compiler, le fichier main.h ne se sauvegardait pas...mais depuis que j'ai sauvegardé ce fichier...j'ai un tas d'erreur à la la ligne 10 qui est :
    long tailleMot = strlen(motATrouver);


    Voici les erreurs :
    error: syntax error before '{' token (cette erreur concerne la ligne 9 qui est celle où j'ouvre l'accolade du main)
    error: parameter 'tailleMot' initialized
    error: 'motATrouver undeclared (first use...)
    error: (Each undeclared indentifier is reported only once
    error: for each function it appears in.)
    confused by earlier errors, bailing out
    • Partager sur Facebook
    • Partager sur Twitter
      15 avril 2006 à 12:28:41

      Citation : Bladeee

      J'ai pas mis tout le code, si vous voulez que je le mette dites le moi


      Oui. (copié/collé strict)
      • Partager sur Facebook
      • Partager sur Twitter
      Music only !
        15 avril 2006 à 13:32:25

        Voilà le main.c:


                                 /* Jeu du Pendu by Bladeee*/

        #include <stdio.h>
        #include <stdlib.h>
        #include <string.h>
        #include <ctype.h>
        #include "main.h"

        int main (void)
        {

                char motATrouver[TAILLE_MAX] = "BLADEEE", caractereJoueur = 0;
                long tailleMot = 0;

                tailleMot = strlen(motATrouver);

               
                crypterMot (motATrouver, tailleMot);

               
                printf("Quelle lettre ? ");
                caractereJoueur = lireCaractere();

                reponseCaracterePresent = chercheCaractere(motATrouver, caractereJoueur, tailleMot);

                chercheCaractere(motATrouver, caractereJoueur, tailleMot);

                if(reponseCaracterePresent == 1)
                {
                        printf("Oui\n");
                }
                else
                {
                        printf("Non\n");
                }

                return 0;
        }

        void crypterMot(char motATrouver[TAILLE_MAX], long tailleMot)
        {
            long i;
            char caractereACrypter;

            for (i = 0; i<tailleMot; i++)
            {
                caractereACrypter = motATrouver[i];
                caractereACrypter = '*';
                printf("%c", caractereACrypter);
            }
                printf("\n");
        }

        char lireCaractere()
        {
            char caractereJoueur = 0;

            caractereJoueur = getchar();
            caractereJoueur = toupper(caractereJoueur);

            while (getchar() != '\n') ;

            return caractereJoueur;
        }

        int chercheCaractere (char motATrouver[], char caractereJoueur, long tailleMot)
        {
                long i;
                int reponseCaracterePresent = 0;


                for (i = 0; i < tailleMot; i++)
                {

                        if (caractereJoueur == motATrouver[i])
                        {
                                reponseCaracterePresent = 1;
                        }

                }
                return reponseCaracterePresent;
        }


        Voilà le main.h:

        #define TAILLE_MAX 100

        void crypterMot(char motATrouver[TAILLE_MAX], long tailleMot);
        char lireCaractere();
        int chercheCaractere (char motATrouver[], char caractereJoueur, long tailleMot);
        • Partager sur Facebook
        • Partager sur Twitter
          15 avril 2006 à 14:28:32

          Citation : Bladeee

          Voilà le main.c:


          Ca parait assez clair :

          Compiling: main.c
          In file included from main.c:8:
          main.h: At top level:
          main.h:5: warning: function declaration isn't a prototype

          Les fonctions sans paramètres doivent être définies avec void.
          int f(void);

          et non
          int f();


          main.c: In function `main_':
          main.c:25: error: `reponseCaracterePresent' undeclared (first use in this function)
          main.c:25: error: (Each undeclared identifier is reported only once
          main.c:25: error: for each function it appears in.)

          Effectivement, reponseCaracterePresent n'est pas définie...
          • Partager sur Facebook
          • Partager sur Twitter
          Music only !
            15 avril 2006 à 15:10:33

            Ok merci beaucoup -ed- ;) ...

            Mais pourquoi ?

            Citation : M@téo21

            void bonjour()
            {
                printf("Bonjour");
            }


            Il ne met pas le type void entre les parenthèses...est-ce parceque la fonction ne retourne rien ?
            • Partager sur Facebook
            • Partager sur Twitter
              15 avril 2006 à 15:20:13

              Citation : Bladeee


              Mais pourquoi ?

              Citation : M@téo21

              void bonjour()
              {
                  printf("Bonjour");
              }


              Il ne met pas le type void entre les parenthèses...est-ce parceque la fonction ne retourne rien ?


              Rien à voir !

              Ce n'est pas une faute, mais depuis 1989, le langage C défini la notion de 'prototype', qui est une formalisation de l'interface des fonctions. Ca sert à indiquer clairement au compilateur quels sont le nombre de paramètres, le type etc.

              Avant 1989 (je simplifie), les programmes étaitent bourrés d'erreurs parce qu'il n'y avait aucun contrôle possible. Toutes les fonctions avaient comme déclaration f() ou T f(), ce qui fait que
                 f();

                 f(123);

                 f("123");

                 f("123", 456);

              étaient avalés par le compilateur sans broncher, avec tous les effets désastreux qu'on peut imaginer...

              Avec les prototypes, la définition de l'interface est formelle, et le compilateur vérifie ce formalisme. Par contre, si on met (), on revient aux méthodes archaïques... C'est pourquoi un compilateur moderne nous met en garde...

              void bonjour(void)
              {
                  printf("Bonjour\n");
              }

              est préférable.
              • Partager sur Facebook
              • Partager sur Twitter
              Music only !
                15 avril 2006 à 15:54:01

                Ok merci bien de ta réponse...très précise faut le dire ;)
                • Partager sur Facebook
                • Partager sur Twitter

                Problème pour une fonction du Pendu

                × 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