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 :

Problème de switch en C


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par défaut Problème de switch en C
    bonjour,

    je me suis aperçu qu'en C on ne pouvait switcher qu'avec des int.

    Voila donc mon switch:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    159.            switch (strcmp("", str1))
    160.            {
    161.                case strcmp("", "Location"):
    162.                    web->location = str2;
    163.                    break;
    164.                case strcmp("", "Content-Type"):
    165.                    web->type_de_contenu = str2;
    166.                    break;
    167.                case strcmp("", "Server"):
    168.                    web->serveur = str2;
    169.                    break;
    170.                ......
    Le compilo me retourne ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    http.c:164: error: duplicate case value
    http.c:161: error: previously used here
    http.c:167: error: duplicate case value
    http.c:164: error: previously used here
    Je ne comprends pas du tout le code d'erreur.

    Pouvez-vous m'aider ?

    Merci,
    Coyotte507

  2. #2
    Membre éclairé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par défaut
    en fait la en ecrivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    159.            switch (strcmp("", str1))
    160.            {
    161.                case strcmp("", "Location"):
    162.                    web->location = str2;
    163.                    break;
    164.                case strcmp("", "Content-Type"):
    165.                    web->type_de_contenu = str2;
    166.                    break;
    167.                case strcmp("", "Server"):
    168.                    web->serveur = str2;
    169.                    break;
    170.                ......
    dans le switch() tu testes la valeur de retour de strcmp, qui est soit
    • 0: si les chaines comparées sont identiques
    • 0< ou <0: si l'une des chaines est comprise dans l'autre


    et je ne crois pas que ce soit ce que tu veuilles faire...

    le bon code avec ce que tu veux "switcher" devrait être:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     switch (strcmp("", str1))
     {
       case 0:
         ...
         break;
       default:
         ...
     
    }

    Enfin c'est ce que je pense, après ...

  3. #3
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par défaut
    ah oui, je pensais que strcmp donnait une valeur élevée et pas seulement -1, 0 ou 1.

    Merci

    Sinon n'y a-t-il aucun moyen de comparer une chaine à plusieurs autres dans un seul switch?

  4. #4
    Membre éclairé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par défaut
    Pourquoi tu veux switcher???

    tu n'as qu'à créer un tableau de chaines de caracteres dans lequel, tu stockes tes mots (Location, ...).

    exemple:

    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
     
    char *pData[]={"Location"," ... ", ... };
    int i, rval;
     
    //après avoir mis tous tes mots tu fais une boucle for() 
    for(i=0;i<TAILLE_MAX;i++)
    {
      rval=strcmp("Le mot que tu cherches ", pData[i]);
      switch(rval)
      {
         case 0:
           //traitement si le mot recherché est trouvé
           break;
         default:
           break;
      } 
    }

    Bon je sais pas si ça marche, mais c'est une idée que tu peux exploiter...

  5. #5
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par juve1897
    Bon je sais pas si ça marche, mais c'est une idée que tu peux exploiter...
    Utiliser un switch dans ce cas là, c'est tout de même un peu overkill:
    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
     
    char *pData[NB_KEYWORDS]={"Location"," ... ", ... };
    int i = 0;
    int found = 0;
    ...
    do
    {
      if(strcmp(pData[i], search_string) == 0)
      {
        found = 1;
      }
      else
      {
        i++;
      }
    } while (found == 0 && i < NB_KEYWORDS);
     
    if (i == NB_KEYWORDS)
    {
      fprintf(stderr, "Search string %s not found.\n", search_string);
    }
    else
    {
      ...
    }

  6. #6
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par défaut
    Ok donc on ne peut pas faire de switch sur la totalité d'une chaine

    Merci de votre aide!

  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 coyotte507
    je me suis aperçu qu'en C on ne pouvait switcher qu'avec des int.
    Oui, c'est la Loi. Pour les autres types (non promus en int), utiliser if() else if() etc. Attention, == ne fonctionne pas avec les flottants.

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

Discussions similaires

  1. problème avec switch et valeur 0
    Par melisse dans le forum Langage
    Réponses: 12
    Dernier message: 23/02/2007, 13h20
  2. Problème fonction switch
    Par mitherkiller dans le forum C
    Réponses: 4
    Dernier message: 22/02/2007, 15h48
  3. Problème de switch-case ou de buffer ?
    Par Gilouou dans le forum C
    Réponses: 8
    Dernier message: 11/11/2006, 21h08
  4. [Cookies] problème de switch
    Par artotal dans le forum Langage
    Réponses: 1
    Dernier message: 28/12/2005, 02h35
  5. [Tableaux] Problème avec Switch case
    Par philippef dans le forum Langage
    Réponses: 4
    Dernier message: 07/09/2005, 16h37

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