Partage
  • Partager sur Facebook
  • Partager sur Twitter

parcourir une une chaine de caractere

Sujet résolu
    6 août 2019 à 2:43:31

    Bonjour je suis débutant en programmation c et je suis les cours je Jason Champagne.

    Je cherche à parcourir une chaine de caractere et je le faits avec deux notations différents avec lesquelles j'essaye de me familiarisé.

    Dans la premiere boucle while cela fait exactement ce que j'attends mais dans la seconde pas du tout.

    Pourtant j'ai l'impression d'écrire de deux façon différente exactement la même chose.

    Je ne comprends pas pourquoi dans le premier cas cela fonctionne et dans le second cas j'ai un résultat vraiment bizarre.

    Le code ci dessous :

    11 int main(void)
     12 {
     13         int nombreA = 10;
     14         int nombreB = 20;
     15         char* tableau[] = { "bonjour", "aurevoir" };
     16 
     17         int i = 0;
     18         while ( ( * ( * ( tableau + 1 ) + i ) ) != '\0' )  
     19         {
     20                 printf("%c\n", (* (* (tableau + 1) + i) ) );
     21                 i++;
     22         }
     23 
     24         int j = 0;
     25         while ( (*( (tableau[1] ) + j ) )  != '\0')
     26         {
     27                 printf("%c\n", (*(tableau[1]) + j ) );
     28                 j++;
     29         }
    



    • Partager sur Facebook
    • Partager sur Twitter
      6 août 2019 à 8:46:30

      Salut,

      Manipuler les tables de cette sorte mène forcément à de l'embrouille dans les jeux de parenthèses et de pointage. Pourquoi ne pas voir ça comme des tables de char 2D, tout simplement ?

      int i =0;
      
      while(tableau[0][i] != '\0')
      {
         printf("%c\n",tableau[0][i]);
         i++;
      }

      Ca semble tout de suite moins compliqué, et surtout plus lisible. Perso, j'ai eu la flemme d'essayer de déchiffrer ton code.

      Si tu en es déjà à te compliquer la vie pour une chose aussi simple qu'une table de chaîne de char, tu vas être en galère quand ça va vraiment se compliquer.

      Bonne continuation.

      -
      Edité par drx 6 août 2019 à 8:48:44

      • Partager sur Facebook
      • Partager sur Twitter

      Bonhomme !! | Jeu de plateforme : Prototype.

        6 août 2019 à 14:34:45

        drx c'est juste de bien comprendre la syntaxe et la logique des pointeurs en tout cas je ne comprends toujours pas pourquoi c'est deux boucles whiles font deux choses différentes puisque l'on a l'équivalence *(tableau + i) <=> tableau[i]

        Et donc en suivant cette règle mes deux boucles while devrai faire exactement la même chose. Mais ce n'est pas le cas et je ne comprends pas pourquoi.

        • Partager sur Facebook
        • Partager sur Twitter
          6 août 2019 à 14:43:09

          Bonjour,

          Relis ta ligne 17, il te manque une paire de parenthèses (la seule importante, les 2 autres ne servent à rien). C'est plutôt :

          		printf( "%c", *(tableau[1] + j) );
          

          La ligne au dessus tu as bien 3 paires de parenthèses.

          • Partager sur Facebook
          • Partager sur Twitter

          En recherche d'emploi.

            6 août 2019 à 15:04:34

            bonjour, 

            je pense que tu as plutôt voulu faire ceci.

            int main(void)
            {
                    int nombreA = 10;
                    int nombreB = 20;
                    char* tableau[] = { "bonjour", "aurevoir" };
                      int i = 0;
                      while ( ( * ( * ( tableau + 0 ) + i ) ) != '\0' )
                      {
                              printf("%c", (* (* (tableau + 0) + i) ) );
                              i++;
                      }
                    printf("\n");
                      int j = 0;
                      while ( (*( (tableau[1] ) + j ) )  != '\0')
                        {
                            printf("%c", *(tableau[1] + j ) );
                            j++;
                    }
            }
            



            • Partager sur Facebook
            • Partager sur Twitter
              6 août 2019 à 15:39:07

              Merci Dalfab j'ai corrigé et maintenant j'obtiens exactement le même résultat.

              C'était effectivement une paire de parenthèse qui bloquait dans la fonction printf. J'ai corrigé et ça marche nickel maintenant.

              Merci encore vraiment vous avez l'oeuil du tigre :)

              -
              Edité par PierreBoutier1 6 août 2019 à 15:39:49

              • Partager sur Facebook
              • Partager sur Twitter
                11 août 2019 à 11:34:29

                Oui et ça nous pique les yeux de tigre de voir des trucs compliqués quand on peut

                • Écrire tableau[0][i]
                • Faire une boucle for

                Ce qui est la manière  standard de parcourir un  tableau par l'intermédiaire d'un indice

                L'autre façon standard, c'est un pointeur qui "glisse" sur les éléments du tableau

                for (char *p = tableau[0];  *p != '\0' ; p++) {  
                   printf("%c",  *p);
                }

                Autant se familiariser avec les façons les plus simples d'écrire les choses, au lieu d'inventer des trucs biscornus et illisibles.

                -
                Edité par michelbillaud 11 août 2019 à 11:52:41

                • Partager sur Facebook
                • Partager sur Twitter
                  16 août 2019 à 13:39:50

                  Wow effectivement spéciale cette façon de parcourt de tableau
                  • Partager sur Facebook
                  • Partager sur Twitter

                  parcourir une une chaine de caractere

                  × 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