3
votes

Plus de 2 conditions dans une boucle for?

Vous vous demandiez s'il y avait un moyen de comparer 3-4 conditions dans une boucle for? Existe-t-il un moyen de faire cela avec juste une boucle for ou devrais-je ajouter une instruction if dans la boucle pour contrôler le non-impression de 91 - 96?

J'ai essayé d'ajouter une condition initiale, des crochets autour des deux et autour d'eux tous mais je n'arrive pas à le faire imprimer au-delà de 90 et ramasser à 97.

for (int cntr = 65; cntr >= 65 && cntr < 91 || cntr > 96 && cntr < 122; cntr++)

for (int cntr = 65;  cntr < 91 || cntr > 96 && cntr < 122; cntr++)

Essayer d'imprimer des caractères ASCII de 65 à 122 sans afficher de 90 à 96. J'essayais de tout mettre en une seule boucle for si possible.


5 commentaires

N'oubliez pas que les boucles se terminent dès que la condition est fausse. Vous devez avoir un if dans la boucle.


La condition de boucle est une condition de terminaison . Au moment où il devient faux, la boucle se termine. Vous ne pouvez pas avoir de «lacunes».


Ok, ça a du sens. Je vous remercie


Je le pensais mais je ne savais pas s'il y avait un moyen de contourner cela. Merci beaucoup d'avoir clarifié cela pour moi.


n'utilisez pas de nombres magiques comme 65, 90, 96 ou 122, personne ne sait ce qu'ils signifient. Utilisez plutôt 'a' , 'A' ou 'z'


3 Réponses :


0
votes

Comme d'autres l'ont souligné, la condition centrale est une condition break . Comme vous voulez tout dans une boucle, vous ne voulez pas interrompre lorsque vous atteignez cntr == 91 .

Voici un moyen de le faire proprement en une seule boucle (style C ++): p>

for ( i = 0; break_condition_1; ++i)
{
    if ( break_condition_2 || break_condition_3 )
        break;

    // loop code
}

Plus généralement, il y a des moments où vous pouvez avoir plusieurs conditions de rupture authentiques dans une boucle, mais il est préférable de garder certaines / la plupart d'entre elles hors de la première ligne de la boucle for , c'est à dire. pour (...; ...; ...) , car il est inutile et souvent plus difficile à lire. Vous pouvez simplement écrire une condition de rupture au début de votre boucle (c.-à-d. Ligne 2):

for (char cntr = 65; cntr < 123; cntr++)
{
    if ( cntr == 91 ) // skips the parts that you don't want
        cntr = 97;

    std::cout << cntr << std::endl;
}


0 commentaires

0
votes

Ok, donc corrigé le problème comme ceci:

for (int cntr = 65; cntr < 123; cntr++)
    {
        if(!(cntr >= 91 && cntr <= 96))
        cout << "#" << cntr << " = ASCII Char: " << char(cntr) << endl;
    }

Je suppose que c'est la meilleure façon de résoudre le problème pour le moment. Merci encore


0 commentaires

0
votes

Les réponses ci-dessus / ci-dessous l'ont assez bien expliqué sur la façon dont vous pouvez procéder pour avoir plusieurs conditions de boucle for.

Mais disons que vous faites quelque chose comme ça (comme suggéré par Elliott Smith):

int i = 0;
while (break_condition_1 || break_condition_2 || break_condition_3){
   i++;
}

Il pourrait être préférable de le faire simplement pour des raisons de clarté:

for ( i = 0; break_condition_1; ++i)
{
    if ( break_condition_2 || break_condition_3 )
        break;

    // loop code
}

Il n'y a pas de différence majeure entre les boucles for et while, à part fact for loop est plus simple à écrire dans certaines situations. Dans votre cas, je recommanderais la boucle while.


1 commentaires

while équivalent à votre boucle for est while (break_condition_1 &&! (break_condition_2 || break_condition_3))