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 :

break de switch conditionnel


Sujet :

C

  1. #1
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut break de switch conditionnel
    Salux,

    Je me demandais si ceci etait possible, et si oui si c'était à eviter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    switch(valeur)
    {
     case CAS1 :
     case CAS2 :
      if (condition)
      {
        break;
      }
      /* sinon, descend*/
     case CAS3 :
     case CAS4 :
      /* action */
      break;
      /*...*/
    }

  2. #2
    Membre expérimenté Avatar de Sebou77
    Inscrit en
    Mars 2006
    Messages
    212
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2006
    Messages : 212
    Par défaut
    Jamais testé mais oui je dirais que c'est possible, tu as testé ?

    Mais sinon oui je dirais que c'est à éviter

  3. #3
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Pareil moi je dis que c'est possible, je vois pas pourquoi on pourrait pas.

    Après c'est vrai niveau lisibilité c'est pas tip-top.

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Gruik
    Je me demandais si ceci etait possible, et si oui si c'était à eviter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    switch(valeur)
    {
     case CAS1 :
     case CAS2 :
      if (condition)
      {
        break;
      }
      /* sinon, descend*/
     case CAS3 :
     case CAS4 :
      /* action */
      break;
      /*...*/
    }
    Joli ! Faut que je mette ma page à jour :

    http://emmanuel-delahaye.developpez.com/goret.htm

    Ca mérite un bon 7 ou 8...

  5. #5
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Ouais, c'est bien ce qui me semblait, mercix

  6. #6
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Remarque il s'appelle Gruik

  7. #7
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Le goret ça m'connait

  8. #8
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Gruik
    Le goret ça m'connait
    "Dans le cochon tout est bon !" (Mais j'en mange plus, snif, parait que c'est cancérigène...)

  9. #9
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Désolé de vous contredire, mais je ne crois pas que ça marche...

    Quand le switch est évalué, il donne un entier...

    Quand on fait

    c'est équivalent à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if ( (valeur == 1) || (valeur == 2) )
    Donc aucune raison d'avoir à l'intérieur de ça un valeur=3 ou valeur=4...

    Par contre, faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    CAS1 :
    CAS2 :
    CAS3 :
    CAS4 :
     
        if  ( (valeur == 1) || (valeur ==2) )
          {
              .......
              break ;
          }
        ......
        break ;
    oui ça ça marche .....

  10. #10
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par souviron34
    Désolé de vous contredire, mais je ne crois pas que ça marche...

    Quand le switch est évalué, il donne un entier...

    Quand on fait
    c'est équivalent à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if ( (valeur == 1) || (valeur == 2) )
    Donc aucune raison d'avoir à l'intérieur de ça un valeur=3 ou valeur=4...
    Certes, mais la condition n'était pas précisée...

  11. #11
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Emmanuel Delahaye a écrit :

    Certes, mais la condition n'était pas précisée...
    Ben si justement :

    Gruik a écrit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    switch(valeur)
    {
     case CAS1 :
     case CAS2 :
      if (condition)
      {
        break;
      }
      /* sinon, descend*/
     case CAS3 :
     case CAS4 :
      /* action */
      break;
      /*...*/
    }
    Il y a
    /* sinon, descend*/

  12. #12
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par souviron34
    Ben si justement :
    Ben non
    j'appelle ça du pseudo-code abstrait. Ca peut être n'importe quoi.

  13. #13
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    ça n'empêche rien, Emmanuel...

    le if est à l'intérieur du CAS1,2

    Et donc ça revient à ce que je disais.. On ne peut JAMAIS dans ce cas-là avoir CAS3,4 après le if ...

    ou alors il faudrait faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CAS 1 :
    CAS 2 :
          if ( condition )
            {
               ....
               break ;
            }
          break ;
    CAS 3 :
    CAS 4 :

  14. #14
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Citation Envoyé par souviron34
    ça n'empêche rien, Emmanuel...

    le if est à l'intérieur du CAS1,2

    Et donc ça revient à ce que je disais.. On ne peut JAMAIS dans ce cas-là avoir CAS3,4 après le if ...

    ou alors il faudrait faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    CAS 1 :
    CAS 2 :
          if ( condition )
            {
               ....
               break ;
            }
          break ;
    CAS3 :
    CAS4 :
    Euh c'est
    case CAS1
    case CAS2

    avec CAS1, CAS2 des #define je suppose.
    Si la condition n'est pas évalué, ben on rentre bien dans les case CAS3 et CAS4.

  15. #15
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Skyrunner a écrit :

    case CAS1
    case CAS2

    avec CAS1, CAS2 des #define je suppose.
    Si la condition n'est pas évalué, ben on rentre bien dans les case CAS3 et CAS4.
    ça ne change rien , c'est sur le SWITCH ...
    Comme je disais c'est un if ... Donc du moment où tu rentres dans

    if (cas1 ou cas2)

    tu ne peux pas être dans le cas

    if (cas3 ou cas4)
    ....

  16. #16
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    et de plus je me demande si le compilateur accepteras (je pense que non) d'avoir un case suivi de code suivi d'un case sans avoir de break entre les 2...

  17. #17
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    bon voilà comment je vois la chose moi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    [...]
    switch(valeur)
    {
        case CAS1:
        case CAS2:
        {
            if(valeur2 == MASUPERVALEUR)
            {
                break;
            }
        }
        case CAS3:
        case CAS4:
        {
            /* code */
        }
    }
    [...]
    Tu compares le switch à un if mais connais-tu exactement la structure utilisée derrière ? Comment le compilo interprète le tout ? Pourquoi alors est-on obligé de mettre des break à la fin de chaque case ?

    Ici c'est crade mais correct.

  18. #18
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Bon et sinon, la solution pas crade ce serait ceci?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
     
    static void faire (void)
    {
     /* ... */
    }
     
    void func(void)
    {
     /* ... */
     switch(valeur)
     {
      case CAS1 :
      case CAS2 :
       if (!(condition))
       {
         faire();
       }
       break;
     
      case CAS3 :
      case CAS4 :
       faire();
       break;
       /*...*/
     }
    /* ... */
    }

  19. #19
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Gruik
    Bon et sinon, la solution pas crade ce serait ceci?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
     
    static void faire (void)
    {
     /* ... */
    }
     
    void func(void)
    {
     /* ... */
     switch(valeur)
     {
      case CAS1 :
      case CAS2 :
       if (!(condition))
       {
         faire();
       }
       break;
     
      case CAS3 :
      case CAS4 :
       faire();
       break;
       /*...*/
     }
    /* ... */
    }
    Oui, par exemple.

  20. #20
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Par défaut
    Bonjour,
    Citation Envoyé par Gruik
    Bon et sinon, la solution pas crade ce serait ceci?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
     
    static void faire (void)
    {
     /* ... */
    }
     
    void func(void)
    {
     /* ... */
     switch(valeur)
     {
      case CAS1 :
      case CAS2 :
       if (!(condition))
       {
         faire();
       }
       break;
     
      case CAS3 :
      case CAS4 :
       faire();
       break;
       /*...*/
     }
    /* ... */
    }
    sauf que ça ne correspond plus au problème: si on est entré dans une des cas CAS1 ou CAS2, que le test sur condition échoue ou non, on ne poursuivra pas dans CAS3...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XSL-FO] Insérer un page-break conditionnel dans une FO:TABLE
    Par iback dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 28/01/2015, 08h46
  2. switch -> default -> break ?
    Par oodini dans le forum Langage
    Réponses: 15
    Dernier message: 30/11/2011, 14h34
  3. Incident avec Break et switch
    Par Max_zen dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 11/07/2010, 19h16
  4. case switch sans break
    Par virtuadrack dans le forum C
    Réponses: 3
    Dernier message: 18/04/2007, 08h13

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