Partage
  • Partager sur Facebook
  • Partager sur Twitter

pendu

ça compile mais une erreur

Sujet résolu
    15 mai 2006 à 10:00:12

    Bien le bonjour à tous. :p
    Voilà je me suis lancé dans le tp du pendu. :-°
    J'ai pas encore regardé la solution.
    mon code marche mais il y a une erreur à la ligne 37.
    ça me dit "[warning]assignment makes integer from pointer without a cast" o_O
    Je comprends pas trop ce que ça veut dire :o
    voici mon code:

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

    #define MAX 11

    char lireCaractere();
    void compare (char* mot_mystere, char* lettrouve, int c);
    void creaLettrouve (char* mot_mystere, char* lettrouve);
    //si le caractere fait parti du mot le caractere est mis dans la chaine lettrouve
    //a la même place que dans l'autre tableau.
    //sinon rien ne se passe.
    //ensuite il faut comparer les deux tableau, tant qu'ils ne sont pas égaux
    //on recommence.
    int main(int argc, char *argv[])
    {
        int c;
        int test=0; //test si la lettre se trouve dans le mot.
        int valeur=0; //renvoi 0 si les deux chaines =.
        int coups = MAX;
        char mot_mystere[] = "MARRON";
        char lettrouve[50];//contient assez de cases por n'importe quel mot.
        creaLettrouve(mot_mystere, lettrouve);//on met des traits d'un nb egal au mot cherché.


    do {
    coups--;

    printf ("il te reste %d coups\n\n", coups);
    printf ("Tapes une lettre: ");
       c = lireCaractere(); //on place le caractere tapé dans la variable c.
       printf ("\n");
       compare (mot_mystere, lettrouve, c);//si la lettre correspond on la met dans le tableau
       printf ("%s\n\n", lettrouve);
       valeur = strcmp (mot_mystere, lettrouve);
       test = strchr (mot_mystere, c);//on test si c est dans le mot.

         if (test != 0)
            coups++;

    }while (valeur != 0 && coups > 0);//la boucle fonctionne tant que le mot n'est pas trouvé.
                                   //et tant que le nb de c oup est plus grand que 0.
    if (coups == 0)
       printf ("PERDU!!\n\n");
    else
        printf ("Bravo!!! Tu as trouve\n\n");

      system("PAUSE");     
      return 0;
    }

    char lireCaractere()
    {
        char caractere = 0;

        caractere = getchar(); // On lit le premier caractère
        caractere = toupper(caractere); // On met la lettre en majuscule si elle ne l'est pas déjà

        // On lit les autres caractères mémorisés un à un jusqu'à l'\n (pour les effacer)
        while (getchar() != '\n') ;

        return caractere; // On retourne le premier caractère qu'on a lu
    }

    void compare (char* mot_mystere, char* lettrouve, int c )
    {
         int i=0;
         
    for (i=0; mot_mystere[i]!='\0'; i++){
        if (c==mot_mystere[i])
        lettrouve[i] = c;//place la lettre trouvée dans le 2 eme tableau.
    }
    }

     void creaLettrouve (char* mot_mystere, char* lettrouve)
     {
          int nbchar = strlen(mot_mystere);
          int i = 0;
          int j = 0;
        for (i=0; i<nbchar; i++)//compte le nb de tirets à placer
        lettrouve[i] = '-'; //et les met dans le tableau.
        j = nbchar++;
        lettrouve[j] = '\0';
    }


    Merci pour vos reponses :)
    • Partager sur Facebook
    • Partager sur Twitter
      15 mai 2006 à 11:04:02

      salut
      c'est tout simple : le programme t'indique que tu associes 2 types differents.
      là tu as "test" qui est un INT et la fonction strchr qui renvoie un pointeur:
      NULL si la comparaison est fausse, que l'on peut considérer comme un 0 ou un pointeur sur le caractere en question que l'on peut considerer comme autre chose que 0

      j'imagine que avec un compilateur plus ancien ça n'aurait pas marché.

      en fait tu pourrais faire un truc du style : if !strchr(etc...) test=0 else test=1 ou plus simplement te passer de la variable test et faire directement : if !strchr(...) coup++
      • Partager sur Facebook
      • Partager sur Twitter
        15 mai 2006 à 12:34:28

        Merci mrdus, j'ai choisis la deuxieme soluce!;)
        • Partager sur Facebook
        • Partager sur Twitter

        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