Résultats de 1 à 10 sur 10

Sujet : boucles while imbriquées et infame goto

  1. #1
    Membre MP
    Inscrit
    août 2013
    Messages
    6

    boucles while imbriquées et infame goto

    Bonjour, je suis débutant en C et je n\'ai pas trouvé dans les tutoriaux de google d\'instruction pour revenir au début d\'une première boucle while dans le cas de deux boucles imbriquées
    voila un extrait de mon code actuel
    j\'ai mis instr; pour une séquence d\'instruction

    while (test1)
    {
    infame_goto:
    instr;
    while(test2)
    {
    instr;
    if (test3) goto infame_goto;
    }
    instr;
    }

    comment me passer de l\'infame goto?
    existe-il une autre manière de faire qui produise le même résultat?
    Merci de votre aide
    arno-

  2. #2
    Membre MP
    Inscrit
    août 2013
    Messages
    6 517
    je n\'ai pas essayé donc ce n\'est pas garanti mais tu peux voir avec break; ou sinon, tu mets dans ton test du 2° while une autre condition ave ou ||
    par ex
    while ((test2) || (sortie == 1))
    {
    //...
    // quand tu veux sortir
    sortie = 1;
    //...
    }

    Mais tu sors juste après le deuxième while et non avant comme dans ton expemple.
    Si ca marche pas ou si tu veux plus d\'infos, relance un message :
    Lisez la charte, pensez à regarder la FAQ, les tutoriaux, l'annuaire et faites une recherche dans les forums.
    N'oubliez pas le Tag [Résolu]http://www.ressources.moteurprog.com...rum/Resolu.gif.

    Initiez-vous à Delphi avec Turbo Delphi Explorer, au C ou au C++ avec Code::Blocks et C# avec Visual C# 2005 Express.

  3. #3
    Membre MP
    Inscrit
    août 2013
    Messages
    6
    Merci de ta réponse.
    En effet, cela me fait sortir après le deuxième while.
    Par contre, je peux faire comme çà:

    while (test1){
    //
    while (test2){
    if (test3){
    retour = true;
    break;
    }
    if (retour) continue;
    }
    comme çà je sors après la boucle 2 et je retourne directement au début de la boucle 1.
    J\'ai fait un test sur 1 million de boucles; je n\'ai pas vu de différence de performance notables.
    Comme je suis débutant et que je vois écrit partout qu\'il faut mieux essayer de se passer du goto, je me demande pourquoi il est \"mieux\" de rajouter une affectation et un test.

  4. #4
    Membre MP
    Inscrit
    août 2013
    Messages
    6 517
    Perso j\'avais commencé a prog en basic donc sans fonction et je devais utiliser les goto, puis en passant en c plus besoin des goto car il existe les fonction et autres avantages.
    Avec des goto il est tres difficile de suivre ce que va faire le programme, avec un seul goto ca va mais si t\'en mets en cascade avec des imbrications et des sorties de blocs, tu sais pas trop quelles sont les variables qui existent ou qui sont effacees ni la valeur de certaines variables.
    Disons qu\'en faisant sans goto, c\'est plus propre.

    Un celebre informaticien a dit un jour qu\'un programme avec des goto resssemble a un plat de spaghettis.
    Lisez la charte, pensez à regarder la FAQ, les tutoriaux, l'annuaire et faites une recherche dans les forums.
    N'oubliez pas le Tag [Résolu]http://www.ressources.moteurprog.com...rum/Resolu.gif.

    Initiez-vous à Delphi avec Turbo Delphi Explorer, au C ou au C++ avec Code::Blocks et C# avec Visual C# 2005 Express.

  5. #5
    Membre MP
    Inscrit
    août 2013
    Messages
    6
    ok merci, j\'avais commencé en basic aussi il y longtemps et je me remets à la programmation maintenant.
    Dans le cas de mon programme, le code étant très court (12 lignes pour les deux boucles), je vais garder le goto, mais maintenant je sais qu\'on peut faire autrement.
    Sinon, y\'a t\'il un lien qui parle de l\'optimisation des boucles?

  6. #6
    Membre MP
    Inscrit
    août 2013
    Messages
    6 517
    c\'est a dire l\'optimisation des boucles ?
    Et pour le goto, je crois bien que plus personne ne s\'en sert donc autant apprendre a ne pas l\'utiliser.
    Lisez la charte, pensez à regarder la FAQ, les tutoriaux, l'annuaire et faites une recherche dans les forums.
    N'oubliez pas le Tag [Résolu]http://www.ressources.moteurprog.com...rum/Resolu.gif.

    Initiez-vous à Delphi avec Turbo Delphi Explorer, au C ou au C++ avec Code::Blocks et C# avec Visual C# 2005 Express.

  7. #7
    Membre MP
    Inscrit
    août 2013
    Messages
    6
    Ce que j\'apelle (à priori à tort) optimisation dees boucles; c\'est si je vais gagner du temps de calcul en n\'utilisant pas le goto; dans quel cas il vaut mieux utiliser while, for, do wile, until, etc.
    Est-ce que çà dépend du compilateur?
    c\'est ce genre de choses que j\'aimerais savoir

  8. #8
    Membre MP
    Inscrit
    août 2013
    Messages
    6 517
    je ne connais pas de lien qui puisse t\'expliquer, mais en général on trouve soi même la réponse.
    Par exemple si tu veux faire 36 fois un opération tu fais un for...

    A part que ta question est comment se passer des goto ?
    Il faut faire des fonctions, c\'est top et ca n\'existait pas en basic, il fallait faire des goto et gosub.
    Lisez la charte, pensez à regarder la FAQ, les tutoriaux, l'annuaire et faites une recherche dans les forums.
    N'oubliez pas le Tag [Résolu]http://www.ressources.moteurprog.com...rum/Resolu.gif.

    Initiez-vous à Delphi avec Turbo Delphi Explorer, au C ou au C++ avec Code::Blocks et C# avec Visual C# 2005 Express.

  9. #9
    Membre MP
    Inscrit
    août 2013
    Messages
    6
    merci pour ces infos

  10. #10
    Membre MP
    Inscrit
    août 2013
    Messages
    6 517
    Avec plaisir.
    Lisez la charte, pensez à regarder la FAQ, les tutoriaux, l'annuaire et faites une recherche dans les forums.
    N'oubliez pas le Tag [Résolu]http://www.ressources.moteurprog.com...rum/Resolu.gif.

    Initiez-vous à Delphi avec Turbo Delphi Explorer, au C ou au C++ avec Code::Blocks et C# avec Visual C# 2005 Express.

Informations du sujet

Utilisateur(s) parcourant ce sujet

il y a actuellement 1 utilisateur(s) parcourant ce sujet. (0 membre(s) et 1 visiteur(s))

Règles des messages

  • Vous ne pouvez pas créer de sujets
  • Vous ne pouvez pas répondre aux sujets
  • Vous ne pouvez pas importer de fichiers joints
  • Vous ne pouvez pas éditer vos messages
  •  
  • Les BB codes sont Activés
  • Les Smileys sont Activés
  • Le BB code [IMG] est Activé
  • Le code [VIDEO] est Activé
  • Le code HTML est Désactivé