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 :

Petit doute sur l'instruction "switch" [Débutant(e)]


Sujet :

C

  1. #1
    Nouveau membre du Club
    Inscrit en
    Août 2006
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 42
    Points : 31
    Points
    31
    Par défaut Petit doute sur l'instruction "switch"
    Bonjour,

    j'ai écrit du code avec un switch case, le compilateur ne me renvoit pas d'erreur mais j'ai un doute cependant; mon code ressemble à 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
    switch (var)
    {
        case : 1
        fct1();
        break;
     
        case : 2
        fct2();
        break;
     
        case : 3
        if (condition) goto autres_fct;
        else fct6();
        break;
     
        default: fct1();
        break;
     
        autres_fct:
        fct4();
        fct5();
    }
    en fait, j'ai un doute sur le fait que les fonctions 4 et 5 s'execute dans tous les cas...je me demande si apres un break on sort du cas ou on sort carrement du switch..?

    Merci d'avance pour votre aide, n'hesitez pas a me le dire si je n'ai pas été assez clair!!

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    308
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 308
    Points : 373
    Points
    373
    Par défaut
    ARF : la syntaxe des case c'est : case valeur :
    Donc tu dois mettre : case 3 :, case 2 :

    De plus, ton : autres_fct: c'est n'importe quoi ! Pour introduire un cas, les mots sont default et case pas autre chose !

  3. #3
    Vestigo
    Invité(e)
    Par défaut
    Salut, moi même je suis débutant, mais il y'a pas mal de faute dans ton switch. Edite ton code(dièse) et met le entre les balise codes, c'est plus lisible et si tu veux avoir des gens qui te réponde je te conseille de le faire.


  4. #4
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par PsychoH13 Voir le message
    De plus, ton : autres_fct: c'est n'importe quoi ! Pour introduire un cas, les mots sont default et case pas autre chose !
    autres_fct est un label de goto, et on y saute dans le cas 3 si une condition est remplie. C'est une syntaxe correcte. Par contre, il est fort probable qu'il existe une solution plus propre, car l'utilisation du goto rend le flot de logique (un peu) plus complexe.

    Citation Envoyé par SybVicious
    je me demande si apres un break on sort du cas ou on sort carrement du switch..?
    Le break fait sortir du switch. autres_fct ne sera atteint que si var egale 3 et condition est different de zero.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Août 2006
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 42
    Points : 31
    Points
    31
    Par défaut
    Effectivement, je me suis trompé dans la synatxe de mon case, veuillez m 'en excuser.

    Merci Dazumba, c'est la réponse que j'attendais, j'avais un doute sur le break du switch...effectivement, si on sort du switch il va falloir que je revois mon code pour que les fonctions 4 et 5 s'executent dans tous les cas...et si je les mets avant les case, j'imagine que ca ne changera rien?

  6. #6
    Membre éprouvé
    Avatar de Shugo78
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 119
    Points : 1 001
    Points
    1 001
    Par défaut
    Pourquoi ne pas tout simplement mettre les appels aux fonctions fct4() et fct5() en dehors du switch ?
    Je verrais bien ça comme ça :
    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
    switch (var)
    {
        case 1 : 
        fct1();
        break;
     
        case 2 : 
        fct2();
        break;
     
        case 3 : 
        if (condition) break;
        else fct6();
        break;
     
        default: fct1();
        break;
        fct5();
    }
    fct4();
    fct5();

  7. #7
    Membre éclairé
    Avatar de Elijha
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Avril 2003
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2003
    Messages : 314
    Points : 742
    Points
    742
    Par défaut
    Salut,

    D'après ce que j'ai compris, les fct4() et fct5() doivent être exécutées seulement si la condition dans le case 3 est vrai.
    Alors je te propose une autre solution :
    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
      switch (var)
      {
      case 1 :
        fct1();
      break ;
     
      case 2 :
        fct2();
      break;
     
      case 3 :
        // Inversion de la condition par l'opérateur '!'
        if(!condition) fct6() ;
        else
        {
        fct4();
        fct5();
        }
      break;
     
      default :
        fct1();
      break;
      } ;
    Dans le case 3, on inverse la condition pour l'execution de la fct6() et on utilise le else pour les 2 autres fonctions.


    Nota: Eviter (si c'est possible) de mettre un break d'un switch dans une condition (voir L'Echelle de Goret)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        case 3 : 
        if (condition) break;
        else fct6();
        break;

Discussions similaires

  1. Petite doute sur static...
    Par Paulinho dans le forum C++
    Réponses: 2
    Dernier message: 26/01/2006, 11h06

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