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 :

Instruction switch case


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 51
    Par défaut Instruction switch case
    Bonjour à tous,
    Lors de l'utilisation d'une instruction conditionnel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    switch (variable)
    {
    expression 1:
    break;
    expression2:
    break;
    .
    .
    .
    etc
    }
    Quel doit etre le type de variable?
    Si variable est une chaine de caractere, comment ecrire les expression?

    merci beaucoup d'avance.

  2. #2
    Membre éprouvé Avatar de hunta_kirua
    Profil pro
    Inscrit en
    Février 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 110
    Par défaut
    Salut,

    Bon, je suis pas un pro mais pour le type de variable, tu peux mettre des nombres ou des caractères. Pour les chaînes de caractères, tu peux le faire à l'aide d'un enum.

    A+,

    Hunta

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 51
    Par défaut
    ok mais il n'y a pas d'autre solution pour les chaines de caractere,pcq j'ai un nombre de choix tres important?

  4. #4
    Membre éprouvé Avatar de hunta_kirua
    Profil pro
    Inscrit en
    Février 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 110
    Par défaut
    Re,

    Je te propose un lien qui vient de la FAQ : http://cpp.developpez.com/faq/cpp/?p...GS_switch_case

    J'espère que cela correspond à tes attentes.

    A+,

    Hunta

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    En C, variable doit être de type "int" et les expressions sont des constantes.

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    switch (variable) {
        case 1: ....; break;
        case -2: ....; break;
        default: ...;
    }
    On peut aussi utiliser un type char (qui est une sorte de "int") :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    switch (ch) {
        case 'a' : ....; break;
        case 'b' : ....; break;
        default: ...;
    }
    Pour les chaines de caractères, on est condamné à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (strcmp(a tester, valeur1))
    ...
    else if (strcmp(a tester, valeur2))
    ...
    else if (strcmp(a tester, valeur3))
    ...
    Mais rien n'empêche de "tokeniser" valeur1, ... valeurN: associer le contenu à une valeur entière et mettre le tout dans un conteneur. La fonction de recherche retourne l'entier correspondant.
    Note: En C++, la STL permet de faire cela facilement avec le conteneur std::map.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 51
    Par défaut
    ok merci bcp je vais voir ce que je peu faire avec tous cela

  7. #7
    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 wiztricks Voir le message
    Pour les chaines de caractères, on est condamné à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (strcmp(a tester, valeur1))
    ...
    else if (strcmp(a tester, valeur2))
    ...
    else if (strcmp(a tester, valeur3))
    ...
    Tu veux sans doute dire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (strcmp(a tester, valeur1) == 0)
    ...
    else if (strcmp(a tester, valeur2) == 0)
    ...
    else if (strcmp(a tester, valeur3) == 0)
    ...
    on peut aussi utiliser un tableau trié, bsearch(), un index (position), un switch-case sur l'index...

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Oops je voulais dire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (! strcmp(a tester, valeur1))
    ...
    else if (! strcmp(a tester, valeur2))
    ...
    else if (! strcmp(a tester, valeur3))
    Mais parfois mes doigts ont des difficultés a suivre mes pensées.
    Merci pour la correction, pour une initiation, votre écriture est préférable.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  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
    Citation Envoyé par wiztricks Voir le message
    Oops je voulais dire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (! strcmp(a tester, valeur1))
    ...
    else if (! strcmp(a tester, valeur2))
    ...
    else if (! strcmp(a tester, valeur3))
    Mais parfois mes doigts ont des difficultés a suivre mes pensées.
    Merci pour la correction, pour une initiation, votre écriture est préférable.
    - W


    mauvaise écriture

    c'est pourtant simple.. La fonction strcmp n'est pas un booléen, c'est un entier...

    Pourquoi faire de l'abus de langage ???

    Ce qu'a dit Emmanuel est parfaitement correct...

    suppose que var est un booléen.

    Même si le résultat est le même, conceptuellement il est idiot de mélanger les notions de booléen et d'entier, d'autant plus que dans ce cas cela marche pour un seul cas..

    Par contre, on pourrait aussi pour des chaînes vouloir faire :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    switch (a_tester[0]) {
        case 'a' : 
                switch (a_tester[1])
                 {
                    case 'g' : .... ; break ;
                    case 'u' :.... break ;
                    default : break ;
                 }
                break;
        case 'b' : ....; break;
        default: ...;
    }

  10. #10
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    En C les booléens sont une extension des entiers: une expression utilisée dans les tests "if (expr)", "while (expr)" est vraie lorsque différente de 0 et fausse lorsqu'égal à 0.

    Il est donc tout à fait licite d'écrire "! strcmp(...)" même si strcmp retourne un int et non un booleen.

    Reste le "style", si nous comparons:
    • if (!strcmp(...))
    • if (strcmp(...) == 0)
    • if (strcmp(...) == TRUE)

    La 3ème est beaucoup plus "lisible".

    Mais j'avais déjà mentionné que mon choix initial n'était pas des plus heureux.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. instruction pour boucle switch case
    Par aymench1985 dans le forum MATLAB
    Réponses: 3
    Dernier message: 08/03/2015, 23h46
  2. L'instruction switch case
    Par chek0v dans le forum Général Java
    Réponses: 5
    Dernier message: 03/05/2012, 20h50
  3. switch case : instruction commune à tous les cas ?
    Par contremaitre dans le forum Débuter
    Réponses: 2
    Dernier message: 30/09/2008, 12h09
  4. Instruction switch : regrouper les cases ?
    Par Dendrite dans le forum Langage
    Réponses: 2
    Dernier message: 14/08/2008, 11h41
  5. [Language] aide sur les switch case
    Par pouss dans le forum Langage
    Réponses: 3
    Dernier message: 05/04/2005, 11h34

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