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 :

un petit test avec switch


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    630
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 630
    Par défaut un petit test avec switch
    Bonjour.
    Est ce que quelqu'un pourrait m'expliquer pourquoi ce code affiche : 3

    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
    #include <stdio.h>
     
    int main(){
      int i = 2;
      switch(i){
      case 1:
        printf("1\n");
        break;
     
      case 2:
     
      case 3:
        printf("3\n");
        break;
     
      default:
        printf("default\n");
        break;
      }
      return 0;
    }
    Merci d'avance.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Le switch se comporte comme un goto. Vu que i vaut 2, il y a saut sur case 2:, puis le programme continue sa route. D'où l'obligation de mettre un break lorsqu'on veut sortir du bloc.

    EDIT :

    Voici en gros comment le switch se comporte :
    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
    int i=2;
     
    if (i == 1)
    	goto case_1;
    if (i == 2)
    	goto case_2;
    if (i == 3)
    	goto case_3;
    goto case_default;
     
    case_1:
    	printf("1\n");
    	goto end;
     
    case_2:
     
    case_3:
    	printf("3\n");
    	goto end;
     
    case_default:
    	printf("default\n");
     
    end:
     
    /* suite du programme */

  3. #3
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    630
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 630
    Par défaut
    C'est quoi l'avantage quand on fait pas un break et que le compilateur aille sur case 3 ...
    Ce serait logique que le compilateur aille sur default s'il trouve rien dans case 2 ... ?
    ce ne serait pas une erreur de conception de compilateur... ?

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    C'est quoi l'avantage quand on fait pas un break et que le compilateur aille sur case 3 ...
    Ca dépend ce que le programmeur veut faire. Il peut vouloir qu'une instruction (ou une série d'instructions) soit exécutée en fonction de plusieurs valeurs de i.

    Ce serait logique que le compilateur aille sur default s'il trouve rien dans case 2 ... ?
    On ne peut pas vraiment dire qu'il y a rien. Il y a un label pour chaque "case".

    ce ne serait pas une erreur de conception de compilateur... ?
    Non, le langage est conçu comme ça.

  5. #5
    Membre chevronné

    Homme Profil pro
    Développeur mobile iOS / Android
    Inscrit en
    Décembre 2008
    Messages
    259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur mobile iOS / Android
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 259
    Par défaut
    Bonjour,

    Comme complément aux réponses avant, étant donné que tu n'as pas définit de maniére explicite dans ton case lorsqu'il est égale à 2, ni de break non plus, l'exécution continue alors jusqu'à ce qu'il rencontre une opération explicitement et qu'il trouve aussi la fonction break. Ce qui fait que tu as comme résultat à l'exécution 3.

    cordialement
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell

    N'oubliez pas de consulter les FAQ Swift, Android
    Tutoriel : Développer une application multilingue sous iOS

  6. #6
    Membre très actif
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Par défaut
    Bonjour,
    Generallement, de maniere logique lorsque l on veut qu un cas soit traite par le default, on ne le mentionne pas. A quoi servirait le default sinon
    Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tutoriels, ...)
    - Tests déjà effectués

Discussions similaires

  1. [IBM RTRT] Test avec plusieurs états d'un switch
    Par monnomamoi dans le forum Outils
    Réponses: 0
    Dernier message: 14/07/2010, 21h45
  2. Réponses: 8
    Dernier message: 02/02/2009, 21h50
  3. Un petit test simple avec les iterator STL
    Par philmor34 dans le forum SL & STL
    Réponses: 4
    Dernier message: 17/11/2008, 11h59
  4. petit problème avec mon switch
    Par beegees dans le forum C++
    Réponses: 2
    Dernier message: 03/05/2008, 19h52
  5. tests variables avec switch
    Par wehtam dans le forum Langage
    Réponses: 2
    Dernier message: 03/08/2007, 16h03

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