Aller au contenu

"else if" dans une boucle


cegdd
 Share

Recommended Posts

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 ? :D

Modifié par cegdd
Lien vers le commentaire
Partager sur d’autres sites

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é par cegdd
Lien vers le commentaire
Partager sur d’autres sites

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é par nell
Lien vers le commentaire
Partager sur d’autres sites

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 :unsure:

 

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é par cegdd
Lien vers le commentaire
Partager sur d’autres sites

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é par nell
Lien vers le commentaire
Partager sur d’autres sites

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é par cegdd
Lien vers le commentaire
Partager sur d’autres sites

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é par nell
Lien vers le commentaire
Partager sur d’autres sites

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é par cegdd
Lien vers le commentaire
Partager sur d’autres sites

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.
}
Lien vers le commentaire
Partager sur d’autres sites

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 :huh:

 

merci AlexMog !

Lien vers le commentaire
Partager sur d’autres sites

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 :huh:

 

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.

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Invité
Répondre à ce sujet…

×   Vous avez collé du contenu avec mise en forme.   Supprimer la mise en forme

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Chargement
 Share

×
×
  • Créer...