IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Interrompre une boucle une fois la condition remplie


Sujet :

C

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Interrompre une boucle une fois la condition remplie
    Bonjour, je débute tout juste en algorithmique (sur CodeBlocks) dans le cadre de mes études supérieures, et je suis confronté à un petit problème que je ne parviens pas à résoudre seul.
    J'ai d'abord demandé à mon professeur d'algo qui, pressé d'aller se chercher son café, m'a balancé une réponse à la va-vite, et s'est éclipsé avant que je puisse lui dire que j'avais déjà essayé, et que ça ne marchait pas.

    Il s'agit d'une boucle qui se présente sous la forme suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    if ((ItemMap[X][Y])!= RIEN) //Si on vérifie la présence de l'objet//
            {
                for(space=0; space<10; space++) //Parcourir l'ensemble de l'inventaire contenant 10 poches//
                {
                    if (Inventaire[space] == RIEN) //Si une poche est libre, alors//
                    {
                        (Inventaire[space])=(ItemMap[X][Y]); //On prend l'objet pour le mettre dans la poche d'inventaire//
                        (ItemMap[X][Y])=RIEN; //On le retire de la map//
                        break; //Et on sort de la boucle//
                    }
                }
                printf("Votre inventaire est plein."); //Cette partie ne devrait être atteinte que si la condition n'est vérifiée pour aucune poche//
            }
            break;
    Le problème c'est que "Votre inventaire est plein." s'affiche à chaque fois.
    Il s'agit en fait d'un projet de rogue-like, qui n'en est qu'à ses débuts.

    J'espère avoir créé ce sujet dans la bonne section du forum, dans le cas contraire dites-le moi, je l’effacerais.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Ton printf avec "Votre inventaire est plein" est en dehors de la boucle.
    Tu rentres dans la boucle et effectue tes opérations. Une fois sortis de celle-ci (par un break ou normalement), le programme continue le cheminement normal des opérations et passe donc sur le printf, et l'affiche donc.

    Tu pourrais d'ailleurs réécrire ta boucle bien plus simplement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    space = 0
    while(space < 10 &&  Inventaire[space] != RIEN)  // Recherche d'une poche vide
        space++
     
    if(space < 10){ // Si space est inférieur à 10; signifie qu'une poche vide a été trouvé
        // traitement
    } 
    else { // Sinon, aucune poche vide rencontré
       // printf poche plein
    }

    Je vois un "break" qui traine en dessous de ta boucle... Rassure moi, ce n'est pas là pour sortir de ton if ?

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Je viens de de rajouter, un if (space>9) après ma boucle for, ça marche impec' merci.

    Citation Envoyé par archMqx. Voir le message
    Je vois un "break" qui traine en dessous de ta boucle... Rassure moi, ce n'est pas là pour sortir de ton if ?
    Non non, le break en toute fin est là pour le switch/case qui n'appairait pas dans la portion de code que j'ai postée, je te rassure.
    En tout cas, merci beaucoup pour ta réponse rapide !

  4. #4
    Invité
    Invité(e)
    Par défaut
    Je t'en prie.
    N'oublie pas de marquer le sujet comme [résolu].

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par archMqx. Voir le message
    Tu pourrais d'ailleurs réécrire ta boucle bien plus simplement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    space = 0;
    while(space < 10 &&  Inventaire[space] != RIEN)  // Recherche d'une poche vide
        space++;
    Et encore plus simplement...
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    for (space = 0; space < 10 &&  Inventaire[space] != RIEN; space++);

    Citation Envoyé par archMqx. Voir le message
    Je vois un "break" qui traine en dessous de ta boucle... Rassure moi, ce n'est pas là pour sortir de ton if ?
    Oui, c'est pour sortir de la fameuse "boucle if"

    Citation Envoyé par Maskeren Voir le message
    Je viens de de rajouter, un if (space>9) après ma boucle for, ça marche impec' merci.
    Et ça ne te semblait pas plus évident et plus logique d'écrire if (space == 10) ???

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 27/02/2021, 16h57
  2. Ré exécuter une fonction dans une boucle à chaque fois
    Par kalimmba dans le forum Débuter
    Réponses: 13
    Dernier message: 23/03/2015, 20h21
  3. Réponses: 3
    Dernier message: 11/07/2014, 16h18
  4. faire une boucle sous vba avec condition
    Par ons1402 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 05/03/2012, 17h16
  5. [Débutant] arreter une boucle à une condition
    Par manon.net dans le forum C#
    Réponses: 7
    Dernier message: 08/10/2011, 21h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo