Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème de boucles imbriquées

Sujet résolu
    23 octobre 2006 à 8:46:23

    Salut,
    J'ai un problème avec un exo.
    Il faut obtenir un carré de "X" dont les dimensions sont fournies par l'utilisateur.
    J'obtiens bien une ligne de "X" correspondant au nombre saisi mais sur une seule colonne. Quelque chose doit clocher dans l'imbrication de mes boucles mais je ne vois pas quoi. Tout me semble parfait. :euh:

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

    int main(int argc, char *argv[])
    {
        int nb_lignes;
        int lignes;
        int nb_colonnes;
        int colonne = 0;
        scanf("%ld", &nb_lignes);
        scanf("%ld", &nb_colonnes);
        for (lignes=0 ; lignes < nb_lignes ; lignes++)
        {
            while (colonne < nb_colonnes)
            {
                printf("X");
                colonne++;
            }
            printf("\n");
        }

        return 0;
    }


    En fait la 1ère boucle n'est exécutée qu'une fois.
    Pourquoi ?
    • Partager sur Facebook
    • Partager sur Twitter
      23 octobre 2006 à 8:51:37

      Salut,

      Il y a une petite erreur dans tes scanf : tu utilises %ld, qui est pour un long, or tu a des int, tu devrais donc utiliser %d.
      Le vrai problème de ton programme vient du fait que tu ne remet jamais colonne à 0.
      • Partager sur Facebook
      • Partager sur Twitter
        23 octobre 2006 à 9:05:11

        Merci fradow !!!

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

        int main(int argc, char *argv[])
        {
            int nb_lignes;
            int lignes;
            int nb_colonnes;
            int colonne = 0;
            scanf("%d", &nb_lignes);
            scanf("%d", &nb_colonnes);
            for (lignes=0;lignes < nb_lignes;lignes++)
            {
                while (colonne < nb_colonnes)
                {
                    printf("X");
                    colonne++;
                }
                printf("\n");
                colonne=0;
            }

            return 0;
        }
        • Partager sur Facebook
        • Partager sur Twitter
          23 octobre 2006 à 9:09:12

          Pourquoi ne pas utiliser une boucle for à la place d'une boucle while contenant une incrémentation et nécessitant une remise à zéro ? La boucle for sert justement à ça.

          Voilà ce que ça donnerait :

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

          int main(int argc, char *argv[])
          {
              int nb_lignes;
              int lignes;
              int nb_colonnes;
              int colonne;
              scanf("%d", &nb_lignes);
              scanf("%d", &nb_colonnes);
              for (lignes=0;lignes < nb_lignes;lignes++)
              {
                  for(colonne = 0; colonne < nb_colonnes; colonne++)
                  {
                      printf("X");
                  }
                  printf("\n");
              }

              return 0;
          }
          • Partager sur Facebook
          • Partager sur Twitter
            23 octobre 2006 à 9:13:52

            Le code est plus clair en effet.
            Encore merci à toi.
            • Partager sur Facebook
            • Partager sur Twitter
              24 octobre 2006 à 8:32:36

              "supprimé pour nouveau sujet" :D
              • Partager sur Facebook
              • Partager sur Twitter

              Problème de boucles imbriquées

              × 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