Partage
  • Partager sur Facebook
  • Partager sur Twitter

tite question au sujet du court des chars

Sujet résolu
    8 mai 2006 à 17:59:51

    Bonjour à tous

    pourquoi dans cet exemple de programme de m@teo on ne peut pas utiliser un while à la place du do while?

    long longueurChaine(const char* chaine);

    int main(int argc, char *argv[])
    {
        char chaine[] = "Salut";
        long longueur = 0;

        longueur = longueurChaine(chaine);

        printf("La chaine %s fait %ld caracteres de long", chaine, longueur);

        return 0;
    }

    long longueurChaine(const char* chaine)
    {
        long nombreDeCaracteres = 0;
        char caractereActuel = 0;

        do
        {
            caractereActuel = chaine[nombreDeCaracteres];
            nombreDeCaracteres++;
        }
        while(caractereActuel != '\0'); // On boucle tant qu'on n'est pas arrivé à l'\0

        nombreDeCaracteres--; // On retire 1 caractère de long pour ne pas compter l'\0

        return nombreDeCaracteres;
    }


    j'ai essayé et ça me donne la valeur -1 :(


    merci de vos reponses
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      8 mai 2006 à 18:12:38

      Avec un while, ça devrait donner :
      long longueurChaine(const char* chaine)
      {
          long nombreDeCaracteres = 0;
          char caractereActuel = 0;

          while(caractereActuel != '\0')
          {
              caractereActuel = chaine[nombreDeCaracteres];
              nombreDeCaracteres++;
          }

          nombreDeCaracteres--; // On retire 1 caractère de long pour ne pas compter l'\0

          return nombreDeCaracteres;
      }

      Donc, il boucle tant que le caractère est différent de 0. Hors, il a été initialisé à 0, donc il n'entre jamais dans la boucle. Comme il fait un -- à la fin, il affiche -1 (edit : et pas 0 :p ).

      Il y a une solution plus compacte et plus propre avec un for :
      size_t
      my_strlen(const char *s)
      {
          size_t n;
          for (n = 0; s[n] != '\0'; ++n)
              ;
          return (n);
      }

      Ou encore, version pointeurs :
      size_t
      my_strlen(const char *s)
      {
          size_t n;
          for (n = 0; *s++; ++n)
              ;
          return (n);
      }
      • Partager sur Facebook
      • Partager sur Twitter
        8 mai 2006 à 18:16:21

        merci louisclem c'est très clair! ^^
        • Partager sur Facebook
        • Partager sur Twitter

        tite question au sujet du court des chars

        × 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