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 comparaison


Sujet :

C

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 144
    Points : 118
    Points
    118
    Par défaut Problème de comparaison
    Bonjour,

    j'ai créé plusieurs fonctions en C, et j'aimerais, lors de l'exécution via le terminal, pouvoir choisir une "option".

    Exemple : "fct -a" pour une action spécifique, et "fct -e" pour une autre action spécifique.

    Le programme fonctionnait parfaitement avant que j'essaye de rajouter ces "options".

    J'utilise donc les arguments pour récupérer l'option tapée dans le terminal, mais j'ai ensuite plusieurs problèmes dans mon code lorsque je souhaite vérifier l'option tapée.

    C'est probablement un problème de type ou de pointeurs, mais après deux longues heures à essayer une multitude de combinaison, fonctions et types différents, je suis dans une impasse et je n'arrive plus à avancer.

    Je requiert donc votre aide ^^

    Code du fichier .c : 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
    27
    28
    29
    30
    31
    int main(int nbArgs, char *arg[])
    {
     
      char *option;
      ...
     
     
      switch (nbArgs)
      {
        case 1: ...
        case 2: ...
        case 3:
          option = arg[1];
          nom = arg[2];
          break;
        default: ...
      }
     
     
      ...
     
     
      if (option == "-a")
      {
           // des instructions
      }
     
      if (option == "-e")
      {
           // des instructions différentes
      }

    Code du compilateur (j'ai modifié le numéro de ligne pour que ça corresponde) : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    fct.c: In function ‘main’:
    fct.c:23: attention : comparison with string literal results in unspecified behavior
    fct.c:28: attention : comparison with string literal results in unspecified behavior


    Merci d'avance !

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 90
    Points : 92
    Points
    92
    Par défaut
    Bonjour,

    ce n'est pas plutôt strcmp () ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (!strcmp (option, "-a"))
    {
        ...
    }

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 144
    Points : 118
    Points
    118
    Par défaut
    J'avais tenté d'utiliser le strcmp() mais ça ne fonctionnait pas.

    Plus précisément, il n'y avait pas d'erreur dans la compilation, mais lors de l'exécution du programme, le code à l'intérieur des IF ne s'exécutait pas.

    A croire que la variable option ne contient pas vraiment le texte...
    Peut-être que le type de la variable option, ou alors la ligne "option = arg[1];" n'est pas bon ?

    EDIT : Même si j'ajoute une instruction option = "-e", pour être sûr, le code à l'intérieur des if ne s'exécute pas.

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par gilloddon Voir le message
    Plus précisément, il n'y avait pas d'erreur dans la compilation, mais lors de l'exécution du programme, le code à l'intérieur des IF ne s'exécutait pas.
    Quelles erreur (précisemment)

    Citation Envoyé par gilloddon Voir le message
    Peut-être que le type de la variable option, ou alors la ligne "option = arg[1];" n'est pas bon ?
    Si si, c'est bon

    Citation Envoyé par gilloddon Voir le message
    Même si j'ajoute une instruction option = "-e", pour être sûr, le code à l'intérieur des if ne s'exécute pas.
    Cela devrait pourtant, le problème se situe au niveau de test tests.
    En tout cas, if (option == "-a") n'est pas correct. if(strcmp(option, "-a") == 0) devrait être bon.

    Au fait, quand tu auras fini ton code et qu'il fonctionnera comme tu veux, tu regarderas la fonction getopt()
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 90
    Points : 92
    Points
    92
    Par défaut
    As-tu essayé d'afficher simplement la valeur de ta variable option avant le test IF (via un printf () par exemple) ?

  6. #6
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 144
    Points : 118
    Points
    118
    Par défaut
    Ça fonctionnait bien avec le strcmp (que j'utilisais sous la forme strcmp(option, "-a") == 0, je trouve ça plus clair ^^).

    Le problème venait d'ailleurs, le fichier binaire (qui est traité dans les if) était vide, j'avais oublié de le réactualiser... Normal que le code ne s'exécutait pas.

    Désolé de vous avoir déranger, mais merci de votre aide.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/03/2006, 13h39
  2. Réponses: 11
    Dernier message: 22/03/2006, 22h57
  3. problème de comparaison table dans requète.
    Par Sendo dans le forum Access
    Réponses: 8
    Dernier message: 09/03/2006, 12h10
  4. Problème de comparaison (chez lycos)
    Par Tuscelan dans le forum Langage
    Réponses: 4
    Dernier message: 10/11/2005, 19h13
  5. Problème de comparaison de dates
    Par MiJack dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/03/2004, 22h43

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