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. #21
    Expert confirmé

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

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

    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...
    Et si, puisqu'il répète la fonction faire() en inversant la condition....

    Mais on peut aussi faire :
    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
     
    switch ( valeur )
    {
      case CAS1 :
      case CAS2 :
      case CAS3 :
      case CAS4 :
            if ( (valeur == CAS1) || (valeur == CAS2) )
              {
                 if ( condition )
                   {
                      .....
                      break ;
                   }
              }
            .......
            break ;
    }

  2. #22
    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 : 39
    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 thewho
    Bonjour,

    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...
    Euh si.

    Si la condition est fausse il appelle la fonction faire().
    Si valeur = CAS3 il appelle aussi faire()

  3. #23
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par souviron34
    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...
    Si c'est valide (la pratique est contestable, mais c'est un autre probleme).

    Sinon concernant le rapprochement entre switch et if, ce n'est pas exactement vrai.
    Dans un switch, on commence l'execution sur le case correspondant a la valeur teste (ou default: si aucune valeur ne correspond) et on le deroule jusqu'a rencontre un break (ou un return).

    Ainsi dans le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    switch(var1)
    {
       case 1:
          faire1();
     
       case 2:
          faire2();
          break;
    ...
    }
    si var1 vaut 1, les deux fonctions faire1() et faire2() sont appele.

  4. #24
    Expert confirmé

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Je suis d'accord avec toi que cela permet de le faire, mais ce n'est pas vraiment recommandé, ni pour clarté du code, ni pour correspondre à l'esprit du switch, qui est quand même de bien séparer les cas..

    D'autre part, quand tu dis

    Sinon concernant le rapprochement entre switch et if, ce n'est pas exactement vrai
    si c'est vrai. C'est juste un if multiple imbriqué..

    Dans ton exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    if ( (var == 1) || (var ==2) )
      {
          faire1();
          if ( var == 2 )
             faire2();
      }
    else
      {
      }

  5. #25
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par souviron34
    mais ce n'est pas vraiment recommandé, ni pour clarté du code
    Effectivement (quoique dans certains cas ca puisse se defendre)

    Citation Envoyé par souviron34
    ni pour correspondre à l'esprit du switch, qui est quand même de bien séparer les cas..
    Je n'ai pas la pretention de pretendre connaitre les intentions des createurs du C ou des normalisateurs, mais je n'en suis pas aussi persuader que toi.

    Citation Envoyé par souviron34
    D'autre part, quand tu dis
    Sinon concernant le rapprochement entre switch et if, ce n'est pas exactement vrai
    si c'est vrai. C'est juste un if multiple imbriqué..

    Dans ton exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    if ( (var == 1) || (var ==2) )
      {
          faire1();
          if ( var == 2 )
             faire2();
      }
    else
      {
      }
    Le fait que l'on puisse remplacer un switch par des if est une evidence, mais ne signifie pas qu'un switch n'est qu'un if.

    En outre dans ton explication premiere sur le if et le switch, tu pretendais qu'un switch n'etait qu'un if et que la construction d'un case comme mon exemple n'etait pas possible. Je cite:

    ç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)
    ....

  6. #26
    Expert confirmé

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

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

    En outre dans ton explication premiere sur le if et le switch, tu pretendais qu'un switch n'etait qu'un if et que la construction d'un case comme mon exemple n'etait pas possible. Je cite:
    Eh oui désolé, mais comme 1) je n'ai jamais eu de cours de C (j'ai toujours appris "sur le tas", car je suis physicien), 2) je code et je vois du code C depuis 17 ans 3) j'ai moi-même codé plus d'1 million de lignes de code en C 4) je suis passé à travers du code C "officiel" (dont le code de XWindows, le code de HTTP) en 17 ans je n'ai JAMAIS vu de telle utilisation. Après ta remarque j'ai donc été piocher sur le net et j'ai vu que OUI, ça pouvait exister.. Mea Culpa C'est peut-être enseigné dans les cours, mais je ne connais personne dans mon milieu qui penserait même à l'utiliser comme ça...

    Mais visiblement ça n'est pas franchement utilisé, et je reviens encore sur la clarté....

    case ça veut dire cas .... Donc si c'est pour faire des conditions, autant se servir d'un if.. Et si c'est des cas, eh bien alors on peut grouper les cas oui, mais GROUPER est là le maître-mot, ce me semble.....

  7. #27
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par souviron34
    mais je ne connais personne dans mon milieu qui penserait même à l'utiliser comme ça...
    Ce qui se comprends fort bien.

    Citation Envoyé par souviron34
    Mais visiblement ça n'est pas franchement utilisé, et je reviens encore sur la clarté....
    Non c'est assez rare. Mais ca arrive de le rencontrer et parfois, assez rarement, c'est meme un choix (si c'est correctement documente bien entendu) defendable.

    Citation Envoyé par souviron34
    case ça veut dire cas .... Donc si c'est pour faire des conditions, autant se servir d'un if.. Et si c'est des cas, eh bien alors on peut grouper les cas oui, mais GROUPER est là le maître-mot, ce me semble.....
    L'utilisation des switch ... case comme dans mon exemple n'est ni plus ni moins l'extension du regroupement de cas.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

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, 09h46
  2. switch -> default -> break ?
    Par oodini dans le forum Langage
    Réponses: 15
    Dernier message: 30/11/2011, 15h34
  3. Incident avec Break et switch
    Par Max_zen dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 11/07/2010, 20h16
  4. case switch sans break
    Par virtuadrack dans le forum C
    Réponses: 3
    Dernier message: 18/04/2007, 09h13

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