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 :

Recuperer des options


Sujet :

C

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    143
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2007
    Messages : 143
    Par défaut Recuperer des options
    bonsoir tout le monde,
    voila ma petite fonction ne fait pas tres bien le travail
    elle n'affiche pas le message " option non reconnu " ou " attend un argument " quand j'oublie de rentrer un argument.
    Par exemple: ./test -s10 -d -a12 -c15 lancera le programme.

    Nb: si j'oublie l'argument pour c, il m'affichera "-c attend un argument"

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    int c;
    char * s_arg=NULL, *d_arg=NULL, *a_arg=NULL, *c_arg=NULL; 
    int s_ar, d_ar, a_ar, c_ar;
    while ((c=getopt(argc, argv,":s:d:a:c:"))!=-1)
     {
      switch(c)
        {
         case 's':
            s_arg=optarg; s_ar=atoi(s_arg);
            break;
     
         case 'd': 
            d_arg=optarg; d_ar=atoi(d_arg);
            break;
     
         case 'a': 
            a_arg=optarg; a_ar=atoi(a_arg);
            break;
     
         case 'c': 
            c_arg=optarg; c_ar=atoi(c_arg);
            break;
     
         case '?':
            fprintf(stderr,"Option -%c non reconnu\n",optopt);
            fprintf(stderr,usage,basename (argv[0])); /* argv[0] contient le nom du prog*/
            exit (EXIT_FAILURE);
     
         case ':': 
            fprintf(stderr,"Option -%c attend un argument\n",optopt);
            fprintf(stderr,usage,basename (argv[0]));
            exit (EXIT_FAILURE);
     
         default: assert(0);
        } 
     }
    Merci d'avance

    [edit] Merci pour le point virgule, mais c'etait une erreur de recopie

  2. #2
    Membre émérite
    Avatar de Freed0
    Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    635
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 635
    Par défaut
    Pas de point virgule après while

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 131
    Par défaut
    pfffffffffff comment j ai pas pu voir ca

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    143
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2007
    Messages : 143
    Par défaut
    Personne n'a une petite idée

  5. #5
    Membre émérite
    Avatar de Freed0
    Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    635
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 635
    Par défaut
    Il sert à quoi le premier : dans ":s:d:a:c:" ?

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Citation Envoyé par Freed0
    Il sert à quoi le premier : dans ":s:d:a:c:" ?
    Voir man

    If getopt() finds an option character in argv that was not included in
    optstring, or if it detects a missing option argument, it returns '?'
    and sets the external variable optopt to the actual option character.
    If the first character (following any optional '+'or '-' described
    above) of optstring is a colon (':'), then getopt() returns ':' instead
    of '?' to indicate a missing option argument. If an error was
    detected, and the first character of optstring is not a colon, and the
    external variable opterr is non-zero (which is the default), getopt()
    prints an error message.

  7. #7
    Membre émérite
    Avatar de Freed0
    Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    635
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 635
    Par défaut
    Merci.

  8. #8
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    143
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2007
    Messages : 143
    Par défaut
    Je suis desolé de redemander mais j'aimerais bien comprendre pourquoi cette fonction ne fonctionne pas correctement
    Merci encore

  9. #9
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 69
    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 line86
    Je suis desolé de redemander mais j'aimerais bien comprendre pourquoi cette fonction ne fonctionne pas correctement
    Merci encore
    Ton code est incomplet. Tu peux préciser ?

    Ceci
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
    /* standard */
    #include <stdio.h>
    #include <assert.h>
    #include <stdlib.h>
     
    /* extension */
    #include <getopt.h>
     
    char const *usage = "usage";
     
    /* au pif... */
    static char const *basename (char const *s)
    {
       return s + 2;
    }
     
    int main (int argc, char **argv)
    {
       int c;
       char *s_arg = NULL;
       char*d_arg = NULL;
       char*a_arg = NULL;
       char*c_arg = NULL;
       int s_ar, d_ar, a_ar, c_ar;
     
       while ((c = getopt (argc, argv, ":s:d:a:c:")) != -1)
       {
          switch (c)
          {
          case 's':
             s_arg = optarg;
             s_ar = atoi (s_arg);
             break;
     
          case 'd':
             d_arg = optarg;
             d_ar = atoi (d_arg);
             break;
     
          case 'a':
             a_arg = optarg;
             a_ar = atoi (a_arg);
             break;
     
          case 'c':
             c_arg = optarg;
             c_ar = atoi (c_arg);
             break;
     
          case '?':
             fprintf (stderr, "Option -%c non reconnu\n", optopt);
             fprintf (stderr, usage, basename (argv[0])); /* argv[0] contient le nom du prog */
             exit (EXIT_FAILURE);
     
          case ':':
             fprintf (stderr, "Option -%c attend un argument\n", optopt);
             fprintf (stderr, usage, basename (argv[0]));
             exit (EXIT_FAILURE);
     
          default:
             assert (0);
          }
       }
     
       return 0;
    }
    focntionne correctement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Project   : Forums
    Compiler  : GNU GCC Compiler (called directly)
    Directory : C:\dev\forums\
    --------------------------------------------------------------------------------
    Checking for existence: console.exe
    Executing: C:\CodeBlocks/console_runner.exe "C:\dev\forums\console.exe" -s10 -d -a12 -c15 (in .)
    Process terminated with status 0 (0 minutes, 3 seconds)
    0 errors, 0 warnings
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    Press ENTER to continue.

Discussions similaires

  1. [VB6] récuperation des propriétés d'un fichier exe
    Par ulrick dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 26/03/2004, 00h08
  2. [langage] Récupérer des Warning ??
    Par armada dans le forum Langage
    Réponses: 2
    Dernier message: 05/06/2003, 16h45
  3. [statusbar] recuperer des infos d'un autre prog
    Par noyax dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 20/12/2002, 15h52
  4. Parametrage des options de projet
    Par ares7 dans le forum EDI
    Réponses: 7
    Dernier message: 22/07/2002, 15h33
  5. Réponses: 4
    Dernier message: 18/07/2002, 13h32

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