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 :

Switch(char) ?


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 78
    Points : 48
    Points
    48
    Par défaut Switch(char) ?
    Voila je voudrais juste savoir si c'est possible d'utiliser un switch avec des char et mettre des case 'a' : ..... case 'b' : .... et si oui est ce qu'il y a quelque chose de spécial a faire pour y arriver ?

  2. #2
    Membre expérimenté
    Avatar de Linaa
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    987
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 987
    Points : 1 309
    Points
    1 309
    Par défaut
    Oui, qu'on peut!
    La syntaxe générale du switch est la meme (switch, case, break), quelque soit le type de données que tu testes.
    Juste que pour tester un caractère, il faut le mettre entre ' '.

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut Re: Switch(char) ?
    Citation Envoyé par mello
    Voila je voudrais juste savoir si c'est possible d'utiliser un switch avec des char et mettre des case 'a' : ..... case 'b' : .... et si oui est ce qu'il y a quelque chose de spécial a faire pour y arriver ?
    Et pourquoi ne pas simplement tester avec un petit programme?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 78
    Points : 48
    Points
    48
    Par défaut
    merci beaucoup

  5. #5
    Membre habitué Avatar de Marco85
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    210
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 210
    Points : 187
    Points
    187
    Par défaut
    Citation Envoyé par Linaa
    Oui, qu'on peut!
    La syntaxe générale du switch est la meme (switch, case, break), quelque soit le type de données que tu testes.
    Juste que pour tester un caractère, il faut le mettre entre ' '.
    Quelque soit le type de données tu testes ? Je ne crois pas. Si je ne me trompe pas, on ne fait un switch que sur des int et par extension des char donc pas sur n'importe quel type de données ...

    Marco85

  6. #6
    Membre expérimenté
    Avatar de Linaa
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    987
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 987
    Points : 1 309
    Points
    1 309
    Par défaut
    Citation Envoyé par Marco85
    Quelque soit le type de données tu testes ? Je ne crois pas. Si je ne me trompe pas, on ne fait un switch que sur des int et par extension des char donc pas sur n'importe quel type de données ...
    Même pas pour un float ?

  7. #7
    Membre habitué Avatar de Marco85
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    210
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 210
    Points : 187
    Points
    187
    Par défaut
    Salut Linaa,

    Loin de moi l'idée d'être contradictoire mais voici ce que je lis dans C Reference :

    Citation Envoyé par C Reference
    A switch statement jumps to a place within a controlled statement, depending on the value of an integer expression.
    (c'est moi qui souligne ...)

    Marco85

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par Linaa
    Citation Envoyé par Marco85
    Quelque soit le type de données tu testes ? Je ne crois pas. Si je ne me trompe pas, on ne fait un switch que sur des int et par extension des char donc pas sur n'importe quel type de données ...
    Même pas pour un float ?
    On ne peut comparer 2 float entre eux.
    float a, b;
    [...]
    if(a==b) // marche pas
    [...]

  9. #9
    Expert éminent sénior
    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
    Points : 20 985
    Points
    20 985
    Par défaut Re: Switch(char) ?
    Citation Envoyé par mello
    Voila je voudrais juste savoir si c'est possible d'utiliser un switch avec des char
    La norme dit que switch et case attendent un type int.
    et mettre des case 'a' : ..... case 'b' : .... et si oui est ce qu'il y a quelque chose de spécial a faire pour y arriver ?
    Oui, c'est possible, car en C, les constantes caractères sont de type int. Il n'y à rien à faire de spécial. Poste ton code si tu as un problème.

  10. #10
    Expert éminent sénior
    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
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Linaa
    La syntaxe générale du switch est la meme (switch, case, break), quelque soit le type de données que tu testes
    Non. Ce n'est définit qu'avec le type int.

  11. #11
    Expert éminent sénior
    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
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Linaa
    Citation Envoyé par Marco85
    Quelque soit le type de données tu testes ? Je ne crois pas. Si je ne me trompe pas, on ne fait un switch que sur des int et par extension des char donc pas sur n'importe quel type de données ...
    Même pas pour un float ?
    Certainement pas.

  12. #12
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1
    Points : 0
    Points
    0
    Par défaut probleme similaire
    bonsoir à tous. voila j'ai un problème plus ou moins similaire. Pour un projet scolaire on me demande de faire un switch comprenant et des int (1,2,3,4,5) et un char(*) comment peut-on à la fois mettre l'un et l'autre?

  13. #13
    Membre confirmé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Points : 460
    Points
    460
    Par défaut
    Salut, tu récupères le code ASCII du caractère (donc un int ) en castant avec int.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char c='a';
    printf("\n caractère %c a pour code ASCII %d, c, (int)c );
    Cordialement.

  14. #14
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 129
    Points
    28 129
    Par défaut
    Citation Envoyé par vanderclause.samuel Voir le message
    Pour un projet scolaire on me demande de faire un switch comprenant et des int (1,2,3,4,5) et un char(*) comment peut-on à la fois mettre l'un et l'autre?
    Tu ne peux pas. Le switch accepte les types entiers, et par extension les char. En aucun cas, il ne va accepter un pointeur, qu'il soit sur un char ou sur autre chose.

  15. #15
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Points : 1 351
    Points
    1 351
    Par défaut
    Citation Envoyé par gangsoleil Voir le message
    En aucun cas, il ne va accepter un pointeur, qu'il soit sur un char ou sur autre chose.
    Un pointeur, non mais le contenu d'un pointeur, si.

    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
    #include <stdio.h>
    #include <stdlib.h>
    int main(void)
    {
        char car = '4';
        char* pcar = &car;
     
        switch(*pcar)
        {
            case '4':
                printf ("Bingo!\n");
                break;
            default:
                printf ("???\n");
                break;
        }
        return 0;
    }
    A+

    Pfeuh

  16. #16
    Membre éclairé
    Avatar de Kirilenko
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 234
    Points : 807
    Points
    807
    Par défaut
    Bonjour,

    Citation Envoyé par vanderclause.samuel
    bonsoir à tous. voila j'ai un problème plus ou moins similaire. Pour un projet scolaire on me demande de faire un switch comprenant et des int (1,2,3,4,5) et un char(*) comment peut-on à la fois mettre l'un et l'autre?
    Les expressions de chaque case doivent être des constantes entières (§ 6.8.4.2), et doivent donc être évaluables lors de la compilation. Ce n'est pas le cas de l'adresse d'un objet.
    Peut-être devrais-tu davantage préciser ce qui t'est demandé (quelle est l'expression de contrôle, et quelles sont les expressions des case ?).

    Citation Envoyé par darkwall_37 Voir le message
    Salut, tu récupères le code ASCII du caractère (donc un int ) en castant avec int.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char c='a';
    printf("\n caractère %c a pour code ASCII %d, c, (int)c );
    Quel est l'intérêt, étant donné qu'une constante de type caractère, est de type int en C ?

    Bonne journée.

  17. #17
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 483
    Points : 13 685
    Points
    13 685
    Billets dans le blog
    1
    Par défaut
    Ne veut-il pas plutôt dire qu'il a la valeur étoile (char c = '*';) et non un pointeur sur char (char * pt;) ?

  18. #18
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 196
    Points : 17 165
    Points
    17 165
    Par défaut
    peut-être bien, auquel cas, un simple case '*': devrait suffire

Discussions similaires

  1. switch char/string imbriqués C++
    Par senvedgi dans le forum C++
    Réponses: 3
    Dernier message: 28/05/2011, 21h31
  2. affectation de char dans switch
    Par Linu6 dans le forum C
    Réponses: 7
    Dernier message: 17/09/2007, 22h19
  3. Réponses: 3
    Dernier message: 02/07/2003, 16h24
  4. Réponses: 6
    Dernier message: 26/01/2003, 13h45

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