fonction GETOPT [C] - C++ - Programmation
Marsh Posté le 08-05-2002 à 19:18:49
Y a personne qui sait ?
heu je sais mm pas si c est possible
Marsh Posté le 08-05-2002 à 19:45:39
xc0r a écrit a écrit : Y a personne qui sait ? heu je sais mm pas si c est possible |
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];
}
Marsh Posté le 08-05-2002 à 21:29:07
on a le droit a getopt pour le zappy?
demasked
Marsh Posté le 08-05-2002 à 21:29:37
ReplyMarsh 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
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
Marsh Posté le 09-05-2002 à 23:35:27
euhh
t as essayer avec un inferrieur ou egale pour ta boucle
for ??
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]
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
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
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
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
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