[C] fonction GETOPT

fonction GETOPT [C] - C++ - Programmation

Marsh Posté le 08-05-2002 à 16:55:03    

Bonsoir :)
 
j ai une question tt simple et tt bete et pourtant ca me fait bien c*** de pas trouver :(
 
voila :
 
j ai mon programme :
$> ./a.out -n name1 name2 name3 -x -y
 
le pb ici est que je veux a partir de l option -n, empiler name1, name2 et name3 (qui vont avec l option -n) eventullement en me servant de getopt (puisque je m en sers egalement pour une floppee d autres options ...)
 
seulement voila, je n arrive pas a avoir plus de 1 optarg avec getopt ...
 
si qqn peut me dire comment faire ca m aiderait bcp :)
 
while ((i = getopt(ac, av, "x:y:n:" )) != -1)
{
  switch (i)
   {
     case 'x': e->width = atoi(optarg); break;
     case 'y': e->heigth = atoi(optarg); break;
     case 'n': ????????????????????????; breal;
 
   }
 
}
 
typedef struct s_env
{
  t_crew *crew;
  int x;
  int y;
} t_env;
 
typedef struct s_crew
{
  char *name;
  t_crew *next;
} t_crew;
 
 
merci bcp ca fait plusieurs heures que je cherche en vain ... (voui je sais je suis pas une brute ... mais j apprend ! :) )
 
Xc0r

Reply

Marsh Posté le 08-05-2002 à 16:55:03   

Reply

Marsh Posté le 08-05-2002 à 19:18:49    

:bounce:  :bounce:  :bounce:  
 
 Y a personne qui sait ? :)
 
heu je sais mm pas si c est possible :(
 :eek2:

Reply

Marsh Posté le 08-05-2002 à 19:45:39    

xc0r a écrit a écrit :

:bounce:  :bounce:  :bounce:  
 
 Y a personne qui sait ? :)
 
heu je sais mm pas si c est possible :(
 :eek2:  




 
int main(int ac, char**av)
{
  int i = 0;
  for(; i < ac; i++)
   if(!strncmp(av[i], "-d" ))
     for( ;i < ac; i ++)
       toto = av[i];  
}


---------------
télétunestel ouimélétuness sitélétunes mélétunetron [:koulip31] [:suri]
Reply

Marsh Posté le 08-05-2002 à 21:29:07    

on a le droit a getopt pour le zappy?
demasked :D


---------------
Suri.morkitu.org : Balades au coeur de la ville...
Reply

Marsh Posté le 08-05-2002 à 21:29:37    

up ca m'interesse aussi :D


---------------
Suri.morkitu.org : Balades au coeur de la ville...
Reply

Marsh Posté le 09-05-2002 à 00:27:03    

apparement pas possible de mettre plusieurs arguments a getopt ... :(
 
enfin c est les conclusions que je tire de qq recherches que j ai pu effectuer ...
 
@+
 
Xc0r

Reply

Marsh Posté le 09-05-2002 à 17:52:31    

merci koulip :)
 
   for (j = 0; j < ac ; j++)
    if (!strcmp(av[j], "-n" ))
      for ( ; j < ac  && (av[j+1]? *av[j + 1] != '-': NULL); j++)
      {
        if (strcmp(av[j], "-n" ))
            printf("argument a empiler : %s\n", av[j]);
 
            }
 
 
 
sauf que pour l instant il ne veut pas me garder le dernier arugment qui
part je sais pas ou ! :) :)  .... :-(
 
[xc0r@portable test]$ ./a.out -n toto tata titi tutu
argument a empiler : toto
argument a empiler : tata
argument a empiler : titi
[xc0r@portable test]$
 
grrr, il me manque tutu il est parti ou tutu ? :) :)
 
Xc0r

Reply

Marsh Posté le 09-05-2002 à 20:22:39    

:bounce:  :??:  :??:  :??:  :bounce:  
 :fou:  :fou:  :fou:  :fou:  :fou:  :fou:  :fou:

Reply

Marsh Posté le 09-05-2002 à 23:35:27    

euhh
 
t as essayer avec un inferrieur ou egale pour ta boucle
for ??

Reply

Marsh Posté le 10-05-2002 à 21:07:13    

grungy a écrit a écrit :

euhh
 
t as essayer avec un inferrieur ou egale pour ta boucle
for ??  




 
heu pour le j < ac ?
 
heu non ca c est la condition pour passer d un argument a l autre ...
ce que je veux c est une condition pour rajouter le dernier argument avec le prochain -x
 
exemple :
$> ./a.out -n toto tata titi -x coin -y pouet
                   ^^^^^^^^
 
c est ses 3 arguments que je veux empiler :)
 
Xc0r

 

[jfdsdjhfuetppo]--Message édité par xc0r le 10-05-2002 à 21:18:49--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 10-05-2002 à 21:07:13   

Reply

Marsh Posté le 10-05-2002 à 23:24:54    

yo en fait apres reflexion, je pense que ton probleme vien peut etre du fait que tu ne testes pas la condition de sortie de ton deuxieme for, car si j = ac, tu sors du for, mais *av[j] peux etre different de '-' et donc tu l'empile pas. tu devrais essayer ton code avec un - a la fin, ca te permetrais de voir si ca vien de la.
 
 
j aurais fait un truc du genre :
for (j=0;j<ac;j++) {
   if (!strcomp(av[j],"-n" ) {
        for (t=j;t<ac && *av[t+1]!='-';t++)  
              /*  empile arg; */
        if (t => ac) && (*av[t-1]!='-';)  
              /*  empile arg; */
        j=t;
 
   }
   /* suite */
}
 
je suis pas sur que ca marche, enfin bonne chance ...
apluches

Reply

Marsh Posté le 10-05-2002 à 23:47:53    

oui je te remercie :)
c est a peu pres ce que je voulais et en melangeant les deux j ai trouve ce que je voulais :))))
 
merci encore :)
 
sinon, tu sais pq cette ligne elle fait un warning :
 
for (t = j ; t < ac  && (av[t+1]? *av[t+1] != '-': NULL); t++)
 
Warning : pointer/integer type mismatch in conditional expression
 
elle fait pourtant bien ce que je veux cette ligne ! :)
 
Merci encore :)
 
Xc0r

Reply

Marsh Posté le 11-05-2002 à 00:21:27    

xc0r a écrit a écrit :

oui je te remercie :)
c est a peu pres ce que je voulais et en melangeant les deux j ai trouve ce que je voulais :))))
 
merci encore :)
 
sinon, tu sais pq cette ligne elle fait un warning :
 
for (t = j ; t < ac  && (av[t+1]? *av[t+1] != '-': NULL); t++)
 
Warning : pointer/integer type mismatch in conditional expression
 
elle fait pourtant bien ce que je veux cette ligne ! :)
 
Merci encore :)
 
Xc0r  




 
 
le seul truc qui me chagrine dans cette ligne, c est que tu peux avoir comme test, t<ac && NULL.
 
si ton test (av[t+1]? *av[t+1] != '-': NULL) consite a fair en gros:
 
si av[t+1] est valide alors
   je renvoi le resultat de *av[t+1]
sinon je revois NULL
 
alors je je mettrais un 0 a la place de NULL, et je remplacerais ton av[t+1] par av[t+1]!=NULL...
 
parcque tu peux avoir t<ac && NULL ce qui peux faire hurler le compilo, car ni t ni ac ne sont des pointeurs...
vala

Reply

Marsh Posté le 11-05-2002 à 00:31:18    

je suis une sous merde :)
 
fallait bien mettre 0 a la place de NULL c est tt ...
j ai voulu ecrie un code clair et je me suis plante :)
 
la c est rentre ds l ordre tt fonctionne et j ai pu mettre le getopt apres et tt et tt et ds n importe quel sens !
 
encore merci :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed