cegdd Posté(e) April 29, 2014 Signaler Share Posté(e) April 29, 2014 (modifié) if (variable >= 0) { } for (index = 0 ; index < 150 ; index++) { else if (untableau[index] == 0) { } } else { } bonjour à tous, voici un exemple pour illlustrer mon cas. dans l'exemple ci-dessus, le compilateur n'est pas content. mais comment éviter une cascade de "else if" ? des avis ? Modifié April 29, 2014 par cegdd Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nell Posté(e) April 29, 2014 Signaler Share Posté(e) April 29, 2014 Il faut mettre ce que tu veux faire SI ta condition est réalisé dans les accolades de la condition if pour commencer Tu peux juste dire ce que le code est censé faire stp? ça aidera un peu Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
cegdd Posté(e) April 29, 2014 Auteur Signaler Share Posté(e) April 29, 2014 (modifié) Ce code là ne sert a rien, je l'ai juste écris pour montrer le problème que je rencontre dans mon vrais code. Dans le code, cette partie est censé définir où le pointeur de la souris est par rapport à certaines zones de mon interface. Mais ce n'est pas mon seul cas dans le projet. Une solution a ce problème me permettrais de supprimer bon nombre de "else if" en cascade =) Modifié April 29, 2014 par cegdd Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nell Posté(e) April 29, 2014 Signaler Share Posté(e) April 29, 2014 (modifié) Dans ce cas précis, tu pourrais faire if (variable >= 0) { } for (index = 0 ; index < 150 ; index++) { if (variable<0) et (untableau[index] == 0) { } } else { } un truc comme ça marcherait? En gros ajouter une condition qui remplirait la même condition que le else, parce qu'utiliser un else if comme tu veux le faire, je pense pas que ce soit possible, après j'fais pas de C donc je sais pas. Modifié April 29, 2014 par nell Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
cegdd Posté(e) April 29, 2014 Auteur Signaler Share Posté(e) April 29, 2014 (modifié) le problème avec ta solution c'est que le "else" appartient maintenant qu'au premier "if" ... il vas donc s'éxécuter meme si une condition de la boucle est vraie EDIT: à part si je met uun booléens bloquant le "else" en cas de succès dans la boucle, mais ça devient compliqué pour pas grand chose ... EDIT 2 : en tout cas merci de ton aide =) Modifié April 29, 2014 par cegdd Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nell Posté(e) April 29, 2014 Signaler Share Posté(e) April 29, 2014 (modifié) Dans l'exemple que j'ai mis, "if variable<0" reviendrait à un else qui n'appartient effectivement qu'au premier if. Seulement, tu peux ajouter d'autres conditions en plus du "if variable<0", pour prendre en compte plusieurs autres eventuels if Modifié April 29, 2014 par nell Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
cegdd Posté(e) April 29, 2014 Auteur Signaler Share Posté(e) April 29, 2014 (modifié) Seulement, tu peux ajouter d'autres conditions en plus du "if variable<0", pour prendre en compte plusieurs autres eventuels if Non, si le premier "if" est vrais, il dois stopper toute la chaine de "if else" qui suis (y compris la boucle), comme le ferais une cascade basique de "if""else if". Ce type de condition dans mon code peux être ammené a faire les test jusque 60 fois par secondes ... donc il ne faut pas lui faire parcourir une boucle for pour rien . (je suis un peu éxigent ?) Modifié April 29, 2014 par cegdd Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nell Posté(e) April 29, 2014 Signaler Share Posté(e) April 29, 2014 (modifié) if (variable >= 0) { } if (variable == -5) { } for (index = 0 ; index < 150 ; index++) { if (variable<0) et (untableau[index] == 0) et (variable!=-5) { } } else { } Peut être mettre les conditions sur une ligne pour éviter la cascade de else if? if (variable >= 0) { } else if (untableau[index] == 0) { for (index = 0 ; index < 150 ; index++) { } } else { } tu pourrais aussi mettre le else avant la boucle pour éviter des tours de boucle inutiles plus tôt et gagner du temps Sinon ba, j'ai plus d'idée atm x) En espérant que tu trouves une solution Modifié April 29, 2014 par nell Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
cegdd Posté(e) April 29, 2014 Auteur Signaler Share Posté(e) April 29, 2014 (modifié) dans le premier code il y a toujours le problème du "else" qui appartient du coup qu'au second "if" dans le second il y a un problème avec le "else if" il seras lu qu'une fois avec une valeur "index" non défini. je te remercie pour ton aide nell, c'est gentil de ta part. j'ai trouvé une solution qui marche, mais ça me parait lourd ... bool condition = false; if (variable <= 0) { condition = true; } if (condition == false) { for (index = 0 ; index < 150 ; index++) { if (tableau[index] == 1) { condition = true; } else if (condition == true) { continue; } } } if (condition == false)//équivalent du "else" { } Si vous avez des idées plus légères je suis preneur.(je suis pas étudiant j'ai le droit a tout.) Modifié April 29, 2014 par cegdd Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
AlexMog Posté(e) May 1, 2014 Signaler Share Posté(e) May 1, 2014 dans le premier code il y a toujours le problème du "else" qui appartient du coup qu'au second "if" dans le second il y a un problème avec le "else if" il seras lu qu'une fois avec une valeur "index" non défini. je te remercie pour ton aide nell, c'est gentil de ta part. j'ai trouvé une solution qui marche, mais ça me parait lourd ... bool condition = false; if (variable <= 0) { condition = true; } if (condition == false) { for (index = 0 ; index < 150 ; index++) { if (tableau[index] == 1) { condition = true; } else if (condition == true) { continue; } } } if (condition == false)//équivalent du "else" { } Si vous avez des idées plus légères je suis preneur.(je suis pas étudiant j'ai le droit a tout.) Je vois ce que tu veux faire. Je corrige ton code desuite, en te disant tes erreurs: bool condition = false; if (variable <= 0) { condition = true; } if (condition == false) { for (index = 0 ; index < 150 ; index++) { if (tableau[index] == 1) { condition = true; } else if (condition == true) { continue; // Ne sert à rien, n'utilises pas Continue si tu ne sais pas à quoi il sert. } } } if (condition == false)//équivalent du "else" // Faux. { } Le recode qui marche vraiment: if (variable > 0) { for (index = 0 ; index < 150 ; index++) { if (tableau[index] == 1) { condition = true; break; } } } if (!condition) { // à faire. } Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
cegdd Posté(e) May 1, 2014 Auteur Signaler Share Posté(e) May 1, 2014 Donc le "break", contrairement au "continue" va faire sortir du for ? j'ai essayé de chercher les différences entre le "continue" et le "break", mais ce n'est pas encore vraiment clair dans ma tête suivant si c'est un while, for, switch etc ... et je ne comprend pas pourquoi mon "if (condition == false)" est faux merci AlexMog ! Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
AlexMog Posté(e) May 2, 2014 Signaler Share Posté(e) May 2, 2014 Donc le "break", contrairement au "continue" va faire sortir du for ? j'ai essayé de chercher les différences entre le "continue" et le "break", mais ce n'est pas encore vraiment clair dans ma tête suivant si c'est un while, for, switch etc ... et je ne comprend pas pourquoi mon "if (condition == false)" est faux merci AlexMog ! c'est le "équivalent au else" qui était faux . Ca n'équivaut pas à un else . Continue saute tout le code suivant le continue, et retourne au début de la boucle (en ASM, c'est un jmp vers le début de la boucle). Break arrete l'exécution de la boucle. 1 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
cegdd Posté(e) May 2, 2014 Auteur Signaler Share Posté(e) May 2, 2014 merci pour tes explications claires =) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.