Partage
  • Partager sur Facebook
  • Partager sur Twitter

afficher lettreTrouvee

problème sur les pendus

    8 mai 2006 à 21:12:27

    Salut,
    je n'arrive pas à comprendre le resultat affiché, en bas juste au dessous j'écris ce que j'ai compris.

    code c
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <string.h>



      int main(int argc, char *argv[])
    {
       long i =0;
       char motSecret[] = "marron";
      int lettreTrouvee[4] ={1};
     
       for (i = 0 ; i < 6 ; i++)
            {
                if (lettreTrouvee[i]) // Si on a trouvé la lettre n°i
                    printf("%c", motSecret[i]); // On l'affiche
                else
                    printf("*"); // Sinon, on affiche une étoile pour les lettres non trouvées
            }

        system("PAUSE");
        return 0;
    }


    voila j'explique :

    int lettreTrouvee[4] ={1};

    lettreTrouvee[0]=1;
    lettreTrouvee[1]=1;
    lettreTrouvee[2]=1;
    lettreTrouvee[3]=1;
    puisque lettreTrouvee[4] est un booleen qui est égale à 1 donc il est vrai pour i = 0 à i=3

    donc d'après

    for (i = 0 ; i < 6 ; i++)
            {
                if (lettreTrouvee[i]) // Si on a trouvé la lettre n°i
                    printf("%c", motSecret[i]); // On l'affiche
                else
                    printf("*"); // Sinon, on affiche une étoile pour les lettres non trouvées
            }

    donc la première ligne lettreTrouvee[i] va renvoyer 1 pour tout i=1 et i =4
    donc il va s'appliquer pour donner marr.
    mais pour i = 5 et i= 6 lettreTrouvee[i]) est faut va renvoyer 0, donc
    c'est le printf("*") qui va s'appliquer **
    et on aura pour resultat marr**
    mais dans mon console voila ce que j'ai trouvé:

    console

    m***on
    aidez moi SVP à résoudre ce problème
    zerotamsa
    • Partager sur Facebook
    • Partager sur Twitter
      8 mai 2006 à 23:27:37

      Essaye


      int lettreTrouvee[6] ={1, 1, 1, 1, 0, 0};



      for (i = 0 ; i < 6 ; i++)
              {
                  if (lettreTrouvee[i]) // Si on a trouvé la lettre n°i
                      printf("%c", motSecret[i]); // On l'affiche
                  else
                      printf("*"); // Sinon, on affiche une étoile pour les lettres non trouvées
              }


      Problème ton tableau lettreTrouvee vaut 4 et tu parcours 6 fois le tableau, tu risque donc de lire dans une zone en dehors du tableau donc risque d'erreur.
      • Partager sur Facebook
      • Partager sur Twitter
        9 mai 2006 à 0:24:47

        salut,
        merci pour tes remarques .
        int lettreTrouvee[4] ={1};

        je suis d'accord puisque lettreTrouvee[4] est un booleen
        lettreTrouvee[4] est vrai uniquement pour la case 0 (i=0),
        pou i=2, i= 3 est faux
        on aura m pour i =0
        on aura * pour i =1
        on aura * pour i =2
        on aura * pour i =3

        or i= 4 n'existe pas donc


                    if (lettreTrouvee[i]) // Si on a trouvé la lettre n°i
                        printf("%c", motSecret[i]); // On l'affiche


        donc le code au dessous est faux pour i = 4 et i = 5
        puisque lettreTrouvee[i] n'existe pas on doit avoir ** dans le console mais j'obtiens "on" comme si c'était vrai, je n'arrive pas à comprendre cette ambiguité
        zerotamsa
        • Partager sur Facebook
        • Partager sur Twitter
          9 mai 2006 à 9:03:18

          Citation : tamsamani

          puisque lettreTrouvee[4] est un booleen qui est égale à 1 donc il est vrai pour i = 0 à i=3


            int lettreTrouvee[4] ={1};

          Ne fait pas ce que tu crois.

          Cette instruction créée un tableau de 4 int initialsés comme suit :
          {1, 0, 0, 0};

          lettreTrouvee[4] n'existe pas.

          Ne pas confondre
            int lettreTrouvee[4] ={1};

          et
            lettreTrouvee[4] =1;

          • Partager sur Facebook
          • Partager sur Twitter
          Music only !
            9 mai 2006 à 13:30:59

            salut,
            merci pour tes remarques .
            Code : Cint lettreTrouvee[4] ={1};
            je suis d'accord puisque lettreTrouvee[4] est un booleen
            lettreTrouvee[4] est vrai uniquement pour la case 0 (i=0),
            pou i=2, i= 3 est faux
            on aura m pour i =0
            on aura * pour i =1
            on aura * pour i =2
            on aura * pour i =3

            or i= 4 n'existe pas donc

            Code : C

                        if (lettreTrouvee[i]) // Si on a trouvé la lettre n°i
                            printf("%c", motSecret[i]); // On l'affiche 



            donc le code au dessous est faux pour i = 4 et i = 5
            puisque lettreTrouvee[i] n'existe pas on doit avoir ** dans le console mais j'obtiens "on" comme si c'était vrai, je n'arrive pas à comprendre cette ambiguité
            zerotamsa
            Edité le 09/05/2006 à 13h27 Par tamsamani
            • Partager sur Facebook
            • Partager sur Twitter
              9 mai 2006 à 15:25:40

              Citation : tamsamani


              int lettreTrouvee[4] ={1};


              je suis d'accord puisque lettreTrouvee[4] est un booleen


              Euh non. Il faut être extrèmement précis dans l'usage du vocabulaire...
              Littéralement parlant, lettreTrouvee[4] n'existe pas. (Rappel, les indices d'un tableau de N vont de 0 à N-1). Tu voulais peut être dire

              "Le tableau lettreTrouvee est un tableau de booléens"

              ce qui reste assez approximatif, car les 'booléens' n'existent pas en C90... On a ici affaire à un tableau de 4 int, conformément à sa définition :
              int lettreTrouvee[4];


              Le reste est évidemment erroné, puisque l'hypothèse de départ est fausse...
              • Partager sur Facebook
              • Partager sur Twitter
              Music only !

              afficher lettreTrouvee

              × 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